SQL Server Reporting Services (SSRS):这是一个基于 Web 的报告工具,用于发布报告。报告可以通过 BI Development Studio (BIDS) 或 Report Builder 构建,并发布到 Web 门户。SSRS 服务器本身具有用于以编程方式管理服务器的 Web 服务 API。请注意,SSRS 报告可以使用来自各种来源的数据,而不仅仅是 SQL Server。提供了一个名为 RS.EXE 的命令行工具,用于以编程方式管理 SSRS 服务器。
SQL Server Integration Services (SSIS):这是一个随 SQL Server 提供的 ETL 工具。在架构上,它与 OWB 或 ODI 完全不同,因为它不是代码生成工具。运行时位于客户端,可以位于与数据库服务器不同的机器上。SSIS 包可以使用 BIDS 开发并使用名为 DTEXEC.EXE 的命令行工具独立执行。
BI Development Studio (BIDS):这是一个基于 Visual Studio 的环境,用于开发报告、SSIS 包和 SSAS 多维数据集。如果安装了其他基于 VS 的开发工具(例如 VS Professional),则该工具可以集成到单个环境和公共项目分组中。
在过去的几年里,我在 Oracle 和 SQL Server 之间进行了交换,并在这里写了一篇关于另辟蹊径的简介。 存在许多惯用语和架构差异,并且围绕每个产品的供应商和开发人员/DBA 社区使用不同的术语。
物理架构
SQL Server 对各种事物的组织方式与 Oracle 略有不同,并且具有一两个在 Oracle 中没有直接类似物的关键概念。
“数据库”是 SQL Server 中的一个单独项目,具有自己的用户权限、架构/名称空间和存储。如果您熟悉 Sybase,由于产品的共同来源,它们的工作原理与 Sybase 中的数据库非常相似。
文件组大致相当于表空间,尽管它们是数据库本地的。
架构是与 SQL Server 中的数据库用户不同的概念,尽管用户可以拥有默认架构。
MVCC 在 SQL Server 中的工作方式略有不同。这是一个相对较新的功能,维护行的不同副本,直到旧版本上的锁被释放。SQL Server 没有直接等效于回滚段。默认情况下,它在 SQL Server 数据库上不活动。
Tempdb 在 SQL Server 中使用得更多。系统将其用于临时表和中间连接结果。稍后将详细介绍 tempdb。
表分区比 Oracle 稍显笨拙。您需要设置一个分区函数,从您提供的任何内容创建一个分区键,然后在该分区函数上创建一个分区方案。分区方案的行为有点像文件组,您可以在分区方案上创建表。
换入和换出分区需要您在正确结构的空表上设置约束。该约束保证分区键值适合您打算交换到其中的分区。
在 SQL Server 中,物化视图称为索引视图。该
GROUP BY
子句确实有一个CUBE
运算符,并且文档提到了查询重写功能。但是,此功能没有很好的文档记录,并且可能不是非常成熟。YMMV。SQL Server 不支持自治事务,尽管它支持通过 XA 或 OLEDB 事务协议的两阶段提交。
聚集索引与 Oracle 中的索引排序表略有不同,因为它们不需要表中的所有列都参与聚集索引。它们在 SQL Server 体系结构中的使用比在 Oracle 中的 IOT 更广泛。
SQL Server 确实支持覆盖索引,但没有连接索引。不支持位图索引,尽管它确实有一个索引交集/星形变换运算符,可以计算交集而无需触及事实表。
序列是 SQL Server 中相对较新的新增功能。传统上,自动递增键是通过标识列完成的。您可以通过 将值加载到标识列
set identity_insert on
中。编程
惯用的 T-SQL 与惯用的 PL/SQL 有一些区别。它的工作方式不同,以至于一些范式差异值得更深入地解释。
T-SQL 没有包的概念。数据库中的所有存储过程和函数都存在于一个公共命名空间中,尽管可以使用模式将其分解,并且命名空间是数据库本地的。
了解如何使用临时表,以及
SELECT INTO
. 很少遇到真正需要游标的 T-SQL 代码。临时表允许将操作分解为可以通过集合操作完成的步骤。SELECT INTO
在 tempdb 中是最小记录的,并且在用户数据库的某些恢复模式下也是最小记录的,因此它与持久化中间连接结果的查询运算符一样快。惯用的 T-SQL 将使用临时表的角色,你会在 PL/SQL 中看到游标变量,但会更多地使用集合操作。但是,临时表可能会产生相当迟钝的代码,因此请谨慎使用。
系统数据字典在旧版本上比 Oracle 的字典要迟钝得多,但在 SQL Server 2005 上变得更好。虽然 Microsoft 提供的工具在 SSMS 资源管理器中内置了很多自省内容,但仍然值得了解您的绕过数据字典。但是,它不区分
ALL
,USER
和DBA
DB 对象的视图。SSMS 有一个内置的查询计划查看器。
T-SQL 代码中的标识符可以用 [] 引用,如果被引用,则可以包含各种垃圾。但是,如果我们发现您称“直接/转移”栏目为“直接/转移”,我们会撕掉您的肠子。
SQL Server 确实具有窗口函数(自 2005 IIRC 以来),因此您现在可以在组内进行排序、运行总和等。
T-SQL 没有直接等价于
CONNECT BY
,尽管递归可以通过递归 CTE 完成。如果您需要编写跨数据库(而不是数据库中的模式)的代码,请考虑使用公共同义词将对象别名为本地对象并引用代码中的别名。这避免了对数据库名称的硬编码依赖。
如果您避免对数据库名称进行硬编码依赖,那么数据库可以很容易地在同一台服务器上维护多个环境。
有些东西,比如自定义聚合函数,只能使用 CLR sprocs 来实现。此外,如果您想从事务上下文中逃脱(例如,伪造一个自治事务以进行防回滚错误日志记录),您可以使用 CLR 存储过程,因为它可以在当前事务上下文之外创建本地连接。
安全
登录是在 SQL Server 实例级别定义的,但每个登录都作为“数据库用户”映射到零个或多个数据库。权限可以分配给“登录”(服务器)和“用户”(数据库),但在数据库中通常使用“角色”。用户属于角色,权限分配给角色。SQL Server 2012 添加了“服务器角色”。
SQL Server 2012 引入了一个称为“部分包含的数据库”的概念,它允许将用户和角色信息保存在该数据库的本地。
在数据库中,用户和模式的概念是分开的。可以将用户或角色分配给模式,并且模式拥有数据库对象。
Windows 身份验证在后台使用登录信息对计算机或域上的用户进行身份验证以访问 SQL Server 登录。IIRC 对此的支持是 Oracle 上的一个可选附加功能。
特殊角色“dbo”(“数据库所有者”的缩写)在特定数据库中具有某种超级用户权限。每个数据库都有一个“dbo”角色,用户可以分配给给定数据库的“dbo”角色。
还有一个默认的“dbo”模式。对象可能归 dbo 架构所有 - 由具有“dbo”角色(或系统范围的管理员权限)的用户创建的对象将默认归“dbo”架构所有,除非明确提供另一个架构。
安全信息不与单个数据库的备份一起保存。必须在备份还原到的服务器上显式配置用户和角色。SQL Server 2012 允许将用户和角色数据本地保存到具有新的“部分包含数据库”功能的数据库中。
从 SQL Server 2005 开始,存储过程可以在调用者、创建者、拥有架构或指定用户的安全上下文中执行。
在 SQL Server 上的视图中,对基础表的权限基于拥有该视图的架构的权限。尽管视图定义可以包括从会话中获取信息的过滤器,但对基础表的用户权限不参与安全性。在 Oracle 中,基础表的用户权限可能会影响视图,具体取决于授权的配置。
监控和调整
TBA - oracle 中的内存架构与 SGA 等
备份和恢复
待定
工装
Microsoft 将一组周边工具与 SQL Server 捆绑在一起。提供的一些主要项目是:
SQL Server Management Studio (SSMS):这与 Oracle 上的 SQL Developer 类似——它提供了一个编辑器和代码执行工具。一些有用的功能包括数据库对象浏览器和查询计划查看器。
SQL Server Analysis Services (SSAS):这是一个不同于数据库服务器的 OLAP 服务器。它使用自己的查询语言 (MDX) 和 API (XML/A) 进行客户端-服务器通信。不能用 SQL 查询。SSMS 具有用于编辑 MDX 和原始 XMLA 查询并显示结果的工具。还提供了一个名为 ASCMD.EXE 的命令行查询工具。
SQL Server Reporting Services (SSRS):这是一个基于 Web 的报告工具,用于发布报告。报告可以通过 BI Development Studio (BIDS) 或 Report Builder 构建,并发布到 Web 门户。SSRS 服务器本身具有用于以编程方式管理服务器的 Web 服务 API。请注意,SSRS 报告可以使用来自各种来源的数据,而不仅仅是 SQL Server。提供了一个名为 RS.EXE 的命令行工具,用于以编程方式管理 SSRS 服务器。
SQL Server Integration Services (SSIS):这是一个随 SQL Server 提供的 ETL 工具。在架构上,它与 OWB 或 ODI 完全不同,因为它不是代码生成工具。运行时位于客户端,可以位于与数据库服务器不同的机器上。SSIS 包可以使用 BIDS 开发并使用名为 DTEXEC.EXE 的命令行工具独立执行。
BI Development Studio (BIDS):这是一个基于 Visual Studio 的环境,用于开发报告、SSIS 包和 SSAS 多维数据集。如果安装了其他基于 VS 的开发工具(例如 VS Professional),则该工具可以集成到单个环境和公共项目分组中。
Bulk copy (BCP):类似于 SQL*Loader 的命令行批量插入/提取工具
SQLCMD:类似于 SQL*plus 的命令行查询工具
SQL Profiler:一种跟踪和分析工具,可以从 SQL Server、SSAS 和套件中的其他工具中捕获和评估跟踪信息。
SQL Server 代理:一种作业调度实用程序,可以运行另一种定期作业。
我们的主要产品适用于 SQL Server 和 Oracle,以下是我们必须解决的其他一些差异,请记住:
日期时间处理非常不同:不同的精度,不同的函数集
空字符串在 Oracle 中是 NULL,而不是在 SQL Server 中
字符编码和 Unicode 的处理是非常不同的。在 SQL Server 中,您可以在同一个数据库中混合使用普通 (
varchar
) 或 Unicode (nvarchar
) 列,在 Oracle 中,您可以在数据库级别决定使用哪种编码。