作为 DBA,我将如何从 Oracle 过渡到 SQL Server?

Phi*_*lᵀᴹ 33 oracle sql-server

我是一名 Oracle DBA,也有 Sybase 经验。

两个 RDBMS 平台之间的主要架构和概念差异是什么?

类似于此处的 SQL Server->Oracle 问题的答案将最有用。

Con*_*lls 52

在过去的几年里,我在 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运算符,并且文档中提到了查询重写功能。但是,此功能没有很好的文档记录并且可能不是非常成熟。天啊。

  • 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,USERDBADB 对象的视图。

  • SSMS 有一个内置的查询计划查看器。

  • T-SQL 代码中的标识符可以用 [] 引用,如果引用,可以包含各种垃圾。但是,如果我们发现您在调用“直接/转移”一栏,我们撕掉您的肠子。

  • SQL Server 确实具有窗口函数(自 2005 IIRC 起),因此您现在可以在组内进行排序、运行求和等操作。

  • T-SQL 没有直接等价于CONNECT BY,尽管递归可以通过递归 CTE 完成。

  • 如果您需要编写跨数据库(而不是数据库中的模式)跳转的代码,请考虑使用公共同义词将对象别名为本地对象并引用代码中的别名。这避免了对数据库名称的硬编码依赖。

  • 如果您避免对数据库名称的硬编码依赖,数据库可以很容易地在同一台服务器上维护多个环境。

  • 有些东西,比如自定义聚合函数,只能使用 CLR sprocs 来实现。此外,如果您想从事务上下文中逃脱(例如,为了防回滚错误记录而伪造自治事务),您可以使用 CLR sproc,因为它可以在当前事务上下文之外创建本地连接。

安全

登录是在 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 集成服务 (SSIS):这是 SQL Server 提供的 ETL 工具。在架构上,它与 OWB 或 ODI 有很大不同,因为它不是代码生成工具。运行时位于客户端,可以位于与数据库服务器不同的机器上。SSIS 包可以使用 BIDS 开发,并使用名为 DTEXEC.EXE 的命令行工具独立执行。

  • BI Development Studio (BIDS):这是一个基于可视化工作室的环境,用于开发报告、SSIS 包和 SSAS 多维数据集。如果安装了其他基于 VS 的开发工具(例如 VS Professional),则该工具可以集成到单个环境和公共项目分组中。

  • 批量复制 (BCP):类似于 SQL*Loader 的命令行批量插入/提取工具

  • SQLCMD:类似于SQL*plus的命令行查询工具

  • SQL Profiler:一种跟踪和分析工具,可以从 SQL Server、SSAS 和套件中的其他工具中捕获和评估跟踪信息。

  • SQL Server 代理:一种作业调度实用程序,可以运行另一种类型的定期作业。


MiM*_*iMo 8

我们的主要产品适用于 SQL Server 和 Oracle,以下是我们必须解决的一些其他差异,请记住:

  • 日期时间处理非常不同:不同的精度,不同的函数集

  • 空字符串在 Oracle 中是 NULL,而不是在 SQL Server 中

  • 字符编码和 Unicode 的处理有很大不同。在 SQL Server 中,您可以在同一数据库中混合使用普通 ( varchar) 或 Unicode ( nvarchar) 列,而在 Oracle 中,您在数据库级别决定使用哪种编码。