我是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代理:一种作业调度实用程序,可以运行某种类型的定期作业. (编辑:上饶站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|