摘要:本文解释了 Microsoft® SQL Server™ 2000 数据库和 Oracle 数据库的结构区别。本文是给那些预备数据库以迁移到 SQL Server 2000 的 Oracle 专业人员使用的。
数据库定义
在 Oracle,数据库是指整个 Oracle RDBMS 环境,它包括以下组件:
Oracle 数据库进程和缓冲(实例)。
SYSTEM 表空间包含一个集中系统类目,它可以由一个或多个数据文件构成。
其它由数据库治理员 (DBA)(可选)定义的表空间,每个都由一个或多个数据文件构成。
两个以上的联机恢复日志。
归档恢复日志(可选)。
其它文件(控制文件、Init.ora、Config.ora 等)。
Microsoft® SQL Server™ 2000 数据库提供了数据、应用程序和安全机制的逻辑分隔。一个 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 2000 数据库都维护自己的系统类目,它含有以下信息:
数据对象(数据表、索引、存储过程、视图、触发器等)。
约束。
用户和权限。
用户定义的数据类型。
复制定义。
数据库使用的文件。
SQL Server 的 master 数据库中还包含中心系统类目,它含有系统类目和一些单个数据库的信息,比如:
每个数据库的数据库名称和主文件位置。
SQL Server 登录帐户。
系统消息。
数据库配置值。
远程和/或链接的服务器。
当前活动信息。
系统存储过程。
同 Oracle 的 SYSTEM 表空间类似,SQL Server 必须有 master 数据库才能访问其它数据库。因此,每次对数据库进行重大修改后都应备份 master 数据库,这对防止发生故障很重要。数据库治理员也可镜像构成 master 数据库的所有文件。
有关 master 数据库中和所有其它数据库的系统数据表的具体列表,请参见 SQL Server 联机图书的“系统数据表”。
物理和逻辑存储结构
Oracle RDBMS 由表空间组成,它又组成了数据文件。表空间数据文件被格式化成称作区块的内部单元。区块大小由 DBA 在首次创建 Oracle 数据库时设定。在 Oracle 表空间中创建对象时,用户可以用称作扩展盘区的单位指定其空间(初始扩展盘区、下一扩展盘区、最小扩展盘区和最大扩展盘区)。假如没有明确指定扩展盘区大小,则创建默认扩展盘区。Oracle 扩展盘区的大小各不相同,而且必须含有至少 5 个相邻的区块链。
Microsoft SQL Server 2000 在数据库级别使用文件组来控制表和索引的物理位置。文件组是一个或多个文件的逻辑容器,文件组中的数据按比例填充到属于该文件组的所有文件中。
假如未定义且未使用文件组,数据库对象则放到创建数据库时隐式创建的一个默认文件组中。文件组答应您:
将大数据表分布到多个文件,从而提高 I/O 吞吐量。
存放与相应的表不同的文件索引,这也能提高 I/O 吞吐量和磁盘并发性能。
将 text、ntext 和 image 卷(大对象)存储到独立于数据表的单独文件。
将数据库对象置于特定的磁盘卷轴。
备份并恢复单个数据表和文件组中的一组表。
SQL Server 将文件格式化成称作页的内部单位。页的大小是固定的 8,192 字节(8 KB)。页被组织成扩展盘区,扩展盘区的固定大小是 8 个相邻的页。在 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 1(镜像)或 RAID 5(有额外奇偶校验启动器的条带集做备份)。同样也推荐使用 RAID 10(带奇偶校验的条带集镜像),但它的价格比上面两个选择高。条带集可以很好地分布对数据库文件的随机 I/O 操作。
假如不能选择 RAID,那么文件组是一个很有吸引力的替代方法,它提供与 RAID 相同的一些优点。此外,对于那些非常大的数据库(跨多个物理 RAID 阵列),文件组是一个用可控方式将 I/O 分布到多个 RAID 阵列的好方法。
连续 I/O 必须优化事务日志文件,而且该文件必须有单点故障保护。因此,建议事务日志使用 RAID 1(镜像)。迁移时,这个驱动器的大小至少应该与 Oracle 联机恢复日志和 Oracle 回滚数据段表空间的大小总和相等。请创建一个或多个占据逻辑盘上定义的全部空间的日志文件。与文件组中存储的数据不同,事务日志项总是按先后顺序写入,并不按比例填充。
有关 RAID 的具体信息,请参见 SQL Server 联机图书、Windows NT Server 文档资料和 Microsoft Windows NT Resource Kit。
事务日志和自动恢复
Oracle RDBMS 在每次启动时执行自动恢复。它检查表空间文件的内容与联机恢复日志文件的内容是否一致。假如不一致,Oracle 会将联机恢复文件的内容应用于表空间文件(前滚),然后删除回滚数据段中发现的所有未授权的事务(回滚)。假如 Oracle 无法从联机恢复日志文件获得所需的信息,它会到归档恢复日志文件中查找。
Microsoft SQL Server 2000 也能执行自动数据恢复,它在每次启动时检查系统中的每个数据库。它首先检查 master 数据库,并启动恢复系统中所有其它数据库的线程。自动恢复机制对每个 SQL Server 数据库检查事务日志。假如事务日志中有任何未授权的事务,则复原事务。然后恢复机制检查事务日志中那些尚未写入数据库的授权事务。假如找到这样的事务,它就重新执行事务(前滚)。
每个 SQL Server 事务日志都具有 Oracle 回滚数据段和 Oracle 联机恢复日志的组合功能。每个数据库都有自己的事务日志,它记录了数据库的所有更改,并且由该数据库的所有用户共享。当某项事务开始,数据被修改的时候,日志中记录下一个 BEGIN TRANSACTION 事件(和修改事件)。在自动恢复期间要使用这个事件来判定事务的起始点。接收到每个数据修改声明时,更改情况先写入事务日志,然后再写入数据库本身。SQL Server 有一个自动检查点机制,可以确保已完成的事务定期从 SQL Server 磁盘高速缓存写入事务日志文件。检查点将自上一个检查点以来已被修改的缓存页写入数据库。用检查点将这些缓存页(也叫脏页)写入数据库可确保所有已完成的事务都被写入磁盘。这个过程缩短了恢复系统故障(比如断电)的时间。这个设置是可以更改的,请使用 SQL Server 企业治理器或 Transact-SQL sp_configure 系统存储过程来修改恢复间隔设置。
备份和恢复数据
Microsoft SQL Server 2000 提供了几个数据备份选项:
数据库全部备份
数据库备份将制作整个数据库的拷贝。并不是所有页都被复制到备份集,而只是复制那些实际含有数据的页。数据页和事务日志页都被复制到备份集。
数据库备份集用于重新创建 BACKUP 语句完成时的数据库。假如只存在数据库的数据库备份,它只能恢复到服务器或数据库故障发生之前的上一次数据库备份时的数据库原貌。要进行数据库全部备份,请使用 BACKUP DATABASE 语句或备份向导。
差异备份
完成数据库全部备份后,请定期用 BACKUP DATABASE WITH DIFFERENTIAL 或备份向导只备份那些已经更改的数据和索引页。
事务日志备份
Microsoft SQL Server 中的事务日志是与单个数据库关联的。事务日志文件会一直填写,直到被备份或截断为止。SQL Server 2000 的默认配置是让事务日志自动增长,直到所有可用磁盘空间用完或到达配置的最大大小为止。当事务日志太满的时候,它会产生错误,并禁止进一步修改数据,直到备份或截断日志后才可继续修改。其它数据库不受影响。使用 BACKUP LOG 语句或备份向导可以备份事件日志。
文件备份、文件组备份
文件或文件组备份将一个或多个文件复制到指定数据库,这样可以将数据库备份成更小的单位:文件或文件组一级。具体信息请参见 SQL Server 联机图书。
数据库正在使用的时候就可以进行备份,这样可以对必须连续运行的系统进行备份。SQL Server 的备份处理和内部数据结构最大程度地利用了数据传输速度,同时对事务吞吐量的影响控制在最低水平。
Oracle 和 SQL Server 的日志文件都需要特定的格式。在 SQL Server 中,这些文件(叫做备份设备)是用 SQL Server 企业治理器、Transact-SQL sp_addumpdevice 存储过程和相应的 SQL-DMO 命令创建的。
虽然也可进行手动备份,但建议您使用 SQL Server 企业治理器和/或数据库维护计划向导来制定定期备份或根据数据库活动备份的日程安排。
利用事务日志备份和/或某个数据库全部备份(设备)的差异备份可以将数据库恢复到某个时间点。数据库恢复会用备份中包含的信息覆盖数据。使用 SQL Server 企业治理器、Transact-SQL(RESTORE DATABASE)或 SQL-DMO 可以执行恢复。
如同可以在 Oracle 中取代自动备份一样,在 Microsoft SQL Server 中,db_owner 固定数据库的角色成员也可强制事务日志在每次出现检查点时删除日志内容。这可以使用 SQL Server 企业治理器(将恢复模式设置为简单模式)、Transact-SQL(ALTER DATABASE)或 SQL-DMO 来实现。
网络
Oracle SQL*Net 支持 Oracle 数据库服务器和客户端之间的联网连接。它与透明网络层 (TNS) 数据流协议通讯,答应用户不用编写专用代码就可使用许多不同的网络协议。
至于 Microsoft SQL Server,Net-Libraries(网络库)支持用 Tabular Data Stream(TDS)协议在客户端和服务器之间建立联网连接。它答应与运行命名管道、TCP/ip 套接字或其它 Inter-PRocess Communication (IPC) 机制的多个客户端同时连接。SQL Server 2000 CD-ROM 中包含所有客户端 Net-Library,不需要单独购买。
假如您的浏览器不支持内嵌框,请单击此处在单独的页中查看。
SQL Server Net-Library 选项可以在安装后更改。客户端网络实用工具可以为运行 Microsoft Windows® 2000、Microsoft Windows NT® 4.0、Microsoft Windows 95 或 Microsoft Windows 98 操作系统的客户端配置默认的 Net-Library 和服务器连接信息。所有 ODBC 客户端应用程序都使用同样的默认 Net-Library 和服务器连接信息,除非在设置 ODBC 数据源的时候更改了此信息或者在 ODBC 连接字串中有明确的代码。有关 Net-Libraries 的具体信息,请参见 SQL Server 联机图书。
数据库安全性和角色
要想将 Oracle 应用程序完全迁移到 Microsoft SQL Server 2000,您必须了解 SQL Server 实现数据库安全性和角色的方式。
数据库文件加密
Microsoft windows 2000 答应用户用加密文件系统 (EFS) 来加密文件。SQL Server 2000 可以使用 EFS。数据库文件可以加密,防止其它用户移动、复制或查看数据库内容。加密是在操作系统一级完成的,而不是逻辑数据库级别。当 SQL Server 打开加密文件时,文件内的数据按解密后的形式显示。
网络安全性
Microsoft SQL Server 2000 支持使用安全套接字层 (SSL) 来加密它与客户端之间的网络通讯。这种加密应用于 SQL Server 2000 支持的所有计算机间的协议,有 40 位和 128 位加密两种方式,具体方式取决于运行 SQL Server 的 Microsoft Windows 操作系统的版本。
具体信息请参见 SQL Server 联机图书的“Net-Library 加密”。
登录帐户
登录帐户答应用户访问 SQL Server 数据或治理选项。guest 登录帐户答应用户登录到 SQL Server 并只查看答应 guest 访问的数据库。(guest 并不默认设置,需要用户创建。)
登录帐户答应用户治理或访问 SQL Server 2000 实例中的数据。SQL Server 2000 使用两种不同的方法来验证登录身份:
Windows 身份验证
DBA 指定哪个 Windows 登录帐户可以用于连接到一个 SQL Server 2000 实例。使用这些帐户登录 Windows 的用户可以连接到 SQL Server 2000,无需专门指定数据库登录和密码。使用 Windows 身份验证时,SQL Server 2000 使用 Windows NT 4.0 或 Windows 2000 的安全机制来验证登录连接,并依靠用户的 Windows 安全证书。用户不需要对 SQL Server 2000 输入登录 ID 或密码,因为他们的登录信息是直接从可信任的网络连接获得的。这个功能与 Oracle 用户帐户的 IDENTIFIED EXTERNALLY 选项类似。
SQL Server 身份验证
DBA 定义一个单独的数据库登录帐户。用户试图连接到 SQL Server 2000 时必须指定此登录帐户和密码。这个数据库登录与用户的 Windows 登录无关。这个功能与 Oracle 用户帐户的 IDENTIFIED BY PASSWord 选项类似。
每个 SQL Server 2000 实例都在两种身份验证模式之一上运行:
Windows 身份验证模式(在早期的 SQL Server 版本中叫做集成安全性)。在这种模式下,SQL Server 2000 只答应那些使用 Windows 身份验证的连接。
混合模式。在这种模式下,可以用 Windows 身份验证或 SQL Server 身份验证来建立连接。
有关安全机制的具体信息,请参见 SQL Server 联机图书。
组、角色和权限
SQL Server 和 Oracle 都用权限来加强数据库安全性。SQL Server 声明级权限用于限制创建新数据库对象的权利(与 Oracle 的系统级权限类似)。
SQL Server 还提供对象级权限。与 Oracle 中类似,对象级所有权被分配给对象的创建者,不可转让。其它数据库用户必须获得对象级权限才能访问该对象。sysadmin 固定服务器的角色成员、db_owner 固定数据库的角色成员或 db_securityadmin 固定数据库的角色成员还能将某个用户的对象权限授予其他用户。
SQL Server 声明级和对象级权限可以直接授予数据库用户帐户。但是,治理数据库角色权限通常会更轻易。SQL Server 角色用于授予或撤销某组数据库用户的特权(与 Oracle 角色非常类似)。角色是与特定数据库相关的数据库对象。安装的每个 SQL Server 都有几个特定的固定服务器角色,它们可跨数据库使用。一个固定服务器角色的例子是 sysadmin。Windows 组和数据库用户也可被添加为 SQL Server 登录。权限可以授予 Windows 组或 Windows 用户。
一个数据库可以有任意数量的角色或 Windows 组。每个数据库都有一个默认的 public 角色,而且该角色不可删除。public 角色的作用很象 Oracle 中的 PUBLIC 帐户。每个数据库用户总是 public 角色的成员。除了 public 角色外,一个数据库用户可以是任意多个角色的成员。Windows 用户或组也可以是任意多个角色的成员,而且肯定是 public 角色成员。
组、角色和权限
Microsoft SQL Server 和 Oracle 都用权限来加强数据库安全性。SQL Server 声明级权限用于限制创建新数据库对象的权利(与 Oracle 的系统级权限类似)。
SQL Server 还提供对象级权限。与 Oracle 中类似,对象级所有权被分配给对象的创建者,不可转让。其他数据库用户必须获得对象级权限才能访问该对象。sysadmin 固定服务器的角色成员、db_owner 固定数据库的角色成员或 db_securityadmin 固定数据库的角色成员还能将某个用户的对象权限授予其他用户。
SQL Server 声明级和对象级权限可以直接授予数据库用户帐户。但是,治理数据库角色权限通常会更简单。SQL Server 角色用于授予或撤销某组数据库用户的特权(与 Oracle 角色非常类似)。角色是与特定数据库相关的数据库对象。安装的每个 SQL Server 都有几个特定的固定服务器角色,它们可跨数据库使用。一个固定服务器角色的例子是 sysadmin。Windows NT 组和数据库用户也可被添加为 SQL Server 登录。权限可以授予 Windows NT 组或 Windows NT 用户。
一个数据库可以有任意数量的角色或 Windows NT 组。每个数据库都有一个默认的 public 角色,而且该角色不可删除。public 角色的作用很象 Oracle 中的 PUBLIC 帐户。每个数据库用户总是 public 角色的成员。除了 public 角色外,一个数据库用户可以是任意多个角色的成员。Windows NT 用户或组也可以是任意多个角色的成员,而且肯定是 public 角色成员。
数据库用户和 guest 帐户
在 Microsoft SQL Server 中,用户登录帐户必须先获得授权,然后才能使用数据库及其对象。登录帐户可以用以下方法之一来访问数据库:
登录帐户被指定为数据库用户
登录帐户使用数据库中的 guest 帐户。
Windows NT 组登录可以映射到一个数据库角色。然后,属于该组成员的单个 Windows NT 帐户可以连接到该数据库。
db_owner 或 db_accessadmin 角色的成员或者 sysadmin 固定服务器角色成员可以创建数据库用户帐户角色。一个帐户可以包括几个参数:SQL Server 登录 ID、数据库用户名称(可选)和最多一个角色名称(可选)。数据库用户名称可以与用户的登录 ID 不同。假如未提供数据库用户名称,那么该用户的登录 ID 和数据库用户名称是相同的。假如未提供角色名称,那么该数据库用户只是 public 角色的一个成员。创建数据库用户后,可以视需要为该用户分配任意数量的角色。
db_owner 或 db_accessadmin 角色的成员还能创建 guest 帐户。guest 帐户答应任何合法的 SQL Server 登录帐户即使没有数据库用户帐户也能访问数据库。默认情况下,guest 帐户将继续分配给 public 角色的所有特权;但是这些角色可以被更改为大于或小于 public 角色特权。
Windows NT 用户帐户或组帐户可以获得访问数据库的权限(就象 SQL Server 登录一样)。当属于该组成员的某个 Windows NT 用户连接到数据库时,他会得到分配给该 Windows NT 组的权限。假如同时属于多个 Windows NT 组成员的用户访问数据库,他将获得他所属的所有组的所有权利。
sysadmin 角色
Microsoft SQL Server sysadmin 固定服务器角色成员拥有与 Oracle DBA 类似的权限。在 SQL Server 中,默认情况下,sa SQL Server 身份验证模式登录帐户是这个角色的一个成员;假如 SQL Server 安装在基于 Windows 2000 的计算机上,则是本地 Administrators 组的成员。sysadmin 角色成员可以添加或删除 Windows 用户和组以及 SQL Server 登录。这个角色成员通常有以下责任:
安装 SQL Server。
配置服务器和客户端。
创建数据库。*
建立登录权限和用户权限。*
将数据传入或传出 SQL Server 数据库。*
备份和恢复数据库。*
实施和维护复制。
安排自动操作。*
监视和调节 SQL Server 性能。*
诊断系统问题。
标有星号(*)的任务可以委托给其它安全角色或用户。
sysadmin 固定服务器角色成员可以访问任何数据库和特定 SQL Server 实例上的所有对象(包括数据)。与 Oracle DBA 类似,有几个命令和系统过程是只有 sysadmin 角色成员才能使用的。
db_owner 角色
虽然 Microsoft SQL Server 数据库与使用中的 Oracle 表空间类似,但它们的治理却不同。每个 SQL Server 数据库都是一个自包含治理域。每个数据库都指定给一个数据库所有者 (dbo)。这个用户总是 db_owner 固定数据库角色的成员。其他用户也可以是 db_owner 角色成员。任何是此角色成员的用户都可以治理与该数据库相关的治理任务(这一点与 Oracle 不同,它由一个 DBA 治理所有表空间的治理任务)。这些治理任务包括:
治理数据库访问。
更改数据库选项(只读、单用户等)。
备份和恢复数据库内容。
授予和撤销数据库权限。
创建和删除数据库对象。
db_owner 角色成员有对其数据库进行任何操作的权限。分配给这个角色的大多数权限可以分一部分给几个固定数据库角色,或者授予数据库用户。没有必要拥有 sysadmin 的全服务器特权来获得某个数据库的 db_owner 特权。
结论
Microsoft SQL Server 2000 提供了巨大的商业价值,它成本低、便于使用(有向导、调节工具和自动调节功能),并有集成的数据仓库功能。SQL Server 2000 获得了业内观察家的一些最高评价和褒奖,并显示了可以满足领先公司和电子商务站点要求的能力。
本白皮书回顾了 Oracle 和 Microsoft SQL Server 的许多结构差异,并解释了 Oracle 和 SQL Server 术语的一些不同之处。熟悉 SQL Server 并制定正确的计划后,您可以迁移现有的 Oracle 应用程序并享受 SQL Server 2000 带来的好处。