摘要本文解释了 Microsoft® SQL Server; 数据库和 Oracle 数据库的结构区别本文是给那些准备数据库以迁移到 SQL Server 的 Oracle 专业人员使用的
数据库定义
在 Oracle数据库是指整个 Oracle RDBMS 环境它包括以下组件
Oracle 数据库进程和缓沖(实例)
SYSTEM 表空间包含一个集中系统类目它可以由一个或多个数据文件构成
其它由数据库管理员 (DBA)(可选)定义的表空间每个都由一个或多个数据文件构成
两个以上的联机恢复日志
归档恢复日志(可选)
其它文件(控制文件InitoraConfigora 等)
Microsoft® SQL Server; 数据库提供了数据应用程序和安全机制的逻辑分隔一个 SQL Server 安装(实例)可以支持多个数据库用 SQL Server 构建的应用程序可以用数据库来逻辑分隔业务功能一台计算机上可以有多个 SQL Server 实例每个 SQL Server 实例可以有多个数据库
每个 SQL Server 数据库可以支持文件组它提供了物理分布数据位置的能力一个 SQL Server 文件组可以对含有单个 SQL Server 数据库数据的操作系统文件进行分类以简化数据库管理任务比如备份文件组是 SQL Server 数据库的一个属性不能包含多于一个数据库的操作系统文件但一个数据库可以包含一个以上的文件组创建数据库后可以将文件组添加到数据库
如果您的浏览器不支持内嵌框请单击此处在单独的页中查看
Microsoft SQL Server 还会默认安装以下数据库
model 数据库是所有新建用户数据库的模板
tempdb 数据库类似于 Oracle 临时表空间用于临时工作存储和排序操作与 Oracle 临时表空间不同用户可以创建临时的表当用户登出时这个表会被自动删除
msdb 数据库支持 SQL Server 代理及其安排的作业警报和复制信息
提供的 pubs 和 Northwind 数据库是培训示例数据库
有关默认数据库的详细信息请参见 SQL Server 联机图书
数据库系统类目
每个 Oracle 数据库都在一个中央系统类目和数据字典上运行它位于 SYSTEM 表空间每个 Microsoft SQL Server 数据库都维护自己的系统类目它含有以下信息
数据对象(数据表索引存储过程视图触发器等)
约束
用户和权限
用户定义的数据类型
复制定义
数据库使用的文件
SQL Server 的 master 数据库中还包含中央系统类目它含有系统类目和一些单个数据库的信息比如
每个数据库的数据库名称和主文件位置
SQL Server 登录帐户
系统消息
数据库配置值
远程和/或链接的服务器
当前活动信息
系统存储过程
同 Oracle 的 SYSTEM 表空间类似SQL Server 必须有 master 数据库才能访问其它数据库因此每次对数据库进行重大修改后都应备份 master 数据库这对防止发生故障很重要数据库管理员也可镜像构成 master 数据库的所有文件
有关 master 数据库中和所有其它数据库的系统数据表的详细列表请参见 SQL Server 联机图书的系统数据表
物理和逻辑存储结构
Oracle RDBMS 由表空间组成它又组成了数据文件表空间数据文件被格式化成称作区块的内部单元区块大小由 DBA 在首次创建 Oracle 数据库时设定在 Oracle 表空间中创建对象时用户可以用称作扩展盘区的单位指定其空间(初始扩展盘区下一扩展盘区最小扩展盘区和最大扩展盘区)如果没有明确指定扩展盘区大小则创建默认扩展盘区Oracle 扩展盘区的大小各不相同而且必须含有至少 个相邻的区块链
Microsoft SQL Server 在数据库级别使用文件组来控制表和索引的物理位置文件组是一个或多个文件的逻辑容器文件组中的数据按比例填充到属于该文件组的所有文件中
如果未定义且未使用文件组数据库对象则放到创建数据库时隐式创建的一个默认文件组中文件组允许您
将大数据表分布到多个文件从而提高 I/O 吞吐量
存放与相应的表不同的文件索引这也能提高 I/O 吞吐量和磁盘并发性能
将 textntext 和 image 卷(大对象)存储到独立于数据表的单独文件
将数据库对象置于特定的磁盘卷轴
备份并恢复单个数据表和文件组中的一组表
SQL Server 将文件格式化成称作页的内部单位页的大小是固定的 字节( KB)页被组织成扩展盘区扩展盘区的固定大小是 个相邻的页在 SQL Server 数据库中创建表或索引时它会在一个扩展盘区内被自动分配一个页当表或索引变大时SQL Server 会自动为它分配属于它的扩展盘区与 Oracle 分配整个扩展盘区的方法相比这种做法可以更有效地存储较小的表和索引
详细信息请参见 SQL Server 联机图书的物理数据库结构
数据条带化
安装的大多数 Microsoft SQL Server 不需要 Oracle 类型的数据段SQL Server 的方法是它能用基于硬件的 RAID 或基于软件的 RAID(可从 Windows NT 磁盘管理实用程序或第三方获得)更有效地分布数据(或叫做数据条带化)利用 RAID您可以建立含有多个磁盘驱动器(但显示为一个逻辑磁盘)的数据条带集如果在这个条带集上创建数据库文件磁盘子系统会承担跨多个磁盘分配 I/O 负载的任务建议管理员用 RAID 将数据分布到多个物理磁盘
建议 SQL Server 采用的 RAID 配置是 RAID (镜像)或 RAID (有额外奇偶校验启动器的条带集做备份)同样也推荐使用 RAID (带奇偶校验的条带集镜像)但它的价格比上面两个选择高条带集可以很好地分布对数据库文件的随机 I/O 操作
如果不能选择 RAID那么文件组是一个很有吸引力的替代方法它提供与 RAID 相同的一些优点此外对于那些非常大的数据库(跨多个物理 RAID 阵列)文件组是一个用可控方式将 I/O 分布到多个 RAID 阵列的好方法
连续 I/O 必须优化事务日志文件而且该文件必须有单点故障保护因此建议事务日志使用 RAID (镜像)迁移时这个驱动器的大小至少应该与 Oracle 联机恢复日志和 Oracle 回滚数据段表空间的大小总和相等请创建一个或多个占据逻辑盘上定义的全部空间的日志文件与文件组中存储的数据不同事务日志项总是按先后顺序写入并不按比例填充
有关 RAID 的详细信息请参见 SQL Server 联机图书Windows NT Server 文档资料和 Microsoft Windows NT Resource Kit
事务日志和自动恢复
Oracle RDBMS 在每次启动时执行自动恢复它检查表空间文件的内容与联机恢复日志文件的内容是否一致如果不一致Oracle 会将联机恢复文件的内容应用于表空间文件(前滚)然后删除回滚数据段中发现的所有未授权的事务(回滚)如果 Oracle 无法从联机恢复日志文件获得所需的信息它会到归档恢复日志文件中查找
Microsoft SQL Server 也能执行自动数据恢复它在每次启动时检查系统中的每个数据库它首先检查 master 数据库并启动恢复系统中所有其它数据库的线程自动恢复机制对每个 SQL Server 数据库检查事务日志如果事务日志中有任何未授权的事务则复原事务然后恢复机制检查事务日志中那些尚未写入数据库的授权事务如果找到这样的事务它就重新执行事务(前滚)
每个 SQL Server 事务日志都具有 Oracle 回滚数据段和 Oracle 联机恢复日志的组合功能每个数据库都有自己的事务日志它记录了数据库的所有更改并且由该数据库的所有用户共享当某项事务开始数据被修改的时候日志中记录下一个 BEGIN TRANSACTION 事件(和修改事件)在自动恢复期间要使用这个事件来判断事务的起始点接收到每个数据修改声明时更改情况先写入事务日志然后再写入数据库本身SQL Server 有一个自动检查点机制可以确保已完成的事务定期从 SQL Server 磁盘高速缓存写入事务日志文件检查点将自上一个检查点以来已被修改的缓存页写入数据库用检查点将这些缓存页(也叫髒页)写入数据库可确保所有已完成的事务都被写入磁盘这个过程缩短了恢复系统故障(比如断电)的时间这个设置是可以更改的请使用 SQL Server 企业管理器或 TransactSQL sp_configure 系统存储过程来修改恢复间隔设置
备份和恢复数据
Microsoft SQL Server 提供了几个数据备份选项
数据库全部备份
数据库备份将制作整个数据库的拷贝并不是所有页都被复制到备份集而只是复制那些实际含有数据的页数据页和事务日志页都被复制到备份集
数据库备份集用于重新创建 BACKUP 语句完成时的数据库如果只存在数据库的数据库备份它只能恢复到服务器或数据库故障发生之前的上一次数据库备份时的数据库原貌要进行数据库全部备份请使用 BACKUP DATABASE 语句或备份向导
差异备份
完成数据库全部备份后请定期用 BACKUP DATABASE WITH DIFFERENTIAL 或备份向导只备份那些已经更改的数据和索引页
事务日志备份
Microsoft SQL Server 中的事务日志是与单个数据库关联的事务日志文件会一直