sql-server – 作为一名DBA,我将如何从Oracle转换到SQL Server?

前端之家收集整理的这篇文章主要介绍了sql-server – 作为一名DBA,我将如何从Oracle转换到SQL Server?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我是Oracle DBA,也有Sybase经验.

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

类似于sql Server-> Oracle问题here的答案将是最常用的.

解决方法

在过去的几年里我一直在研究Oracle和sql Server之间的交换,并且在另一方面写了一篇文章 here.有许多习惯和架构差异,供应商和开发人员使用不同的术语/ DBA社区围绕每个产品.

物理架构

sql Server组织各种不同的东西,并且有一个或两个关键概念在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代码;临时表允许将操作分解为可以使用set操作完成的步骤. tempdb中的SELECT INTO记录最少,并且在用户数据库上的某些恢复模式中记录最少,因此它与查询运算符一样快,可以保持中间连接结果.Idiomatic T-sql将在排序中使用临时表您将在PL / sql中看到游标变量的角色,但会更多地使用set操作.但是,临时表可以制作相当钝的代码,因此请谨慎使用.
>系统数据字典比旧版本的Oracle更加迟钝,但是使用sql Server 2005时,系统数据字典要好得多.尽管微软提供的工具在SSMS资源管理器中内置了大量的内省内容,但仍然值得了解你绕着数据字典的方式.但是,它不区分DB对象的ALL,USER和DBA视图.
> SSMS内置了查询计划查看器.
> T-sql代码中的标识符可以用[]引用,并且如果引用则可以包含各种类型的垃圾.但是,如果我们抓到你叫“直接/转移”一栏,我们就会把你的肠子撕掉.
> sql Server确实具有窗口功能(自2005 IIRC以来),因此您现在可以在组内进行排序,运行总和等.
> T-sql没有直接等同于CONNECT BY,尽管递归可以通过递归CTE完成.
>如果您需要编写跨数据库跳过的代码(而不是数据库中的模式),请考虑使用公共同义词将对象别名为local,并引用代码中的别名.这避免了对数据库名称的硬编码依赖性.
>如果您避免对数据库名称进行硬编码依赖,则数据库可以很容易地在同一服务器上维护多个环境.
>某些内容(例如自定义聚合函数)只能使用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等

备份和恢复

TBA

工装

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)或报表生成器构建报表,并将其发布到Web门户. SSRS服务器本身具有用于以编程方式管理服务器的Web服务API.请注意,SSRS报告可以使用来自各种源的数据,而不仅仅是sql Server.提供了一个名为RS.EXE的命令行工具,用于以编程方式管理SSRS服务器.> sql Server Integration Services(SSIS):这是随sql Server提供的ETL工具.在架构上,它与OWB或ODI完全不同,因为它不是代码生成工具.运行时位于客户端,可以位于与数据库服务器不同的计算机上. SSIS包可以使用BIDS开发,并使用名为DTEXEC.EXE的命令行工具独立执行.> B.I.开发工作室(BIDS):这是一个基于视觉工作室的环境,用于开发报告,SSIS包和SSAS多维数据集.如果安装了其他基于VS的开发工具(例如VS Professional),则可以将工具集成到单个环境和公共项目分组中.>批量复制(BCP):类似于sql * Loader的命令行批量插入/提取工具> sqlCMD:类似于sql * plus的命令行查询工具> sql事件探查器:一种跟踪和分析工具,可以从sql Server,SSAS和套件中的其他工具捕获和评估跟踪信息.> sql Server代理:一种作业调度实用程序,可以运行某种类型的定期作业.

猜你在找的MsSQL相关文章