本译文采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议发布,转载请保留此信息
译者:马齿苋 | 链接:http://www.dbabeta.com/2010/oracle-sql-server-comparison-iv.html
作者:Sadequl Hussain | 原文:http://www.sql-server-performance.com/articles/dba/oracle_sql_server_comparison_iv_p1.aspx

Error Log与Alert Log

SQL Server维护着一个运行期间的操作日志,这个日志包括了启动信息、恢复事件、用户操作、备份信息、配置变更、非法登录、错误、警告信息等等。每次 SQL Server服务启动的时候都会生成一个新的日志文件,这个日志就是SQL Server中著名的Error Log。

这个日志是DBA进行错误诊断的一个主要的信息来源。默认情况下SQL Server会保留6个日志文件,老的文件先被先行删掉,这个默认值是可以修改的。当前使用错误日志的名字是ERRORLOG(没有扩展名),紧随其后的名字为ERRORLOG.1,接着是ERRORLOG.2,依此类推。

Oracle中与SQL Server Error Log等价的是Alert Log文件,Alert Log包含了数据启动关闭、实例恢复、配置变更、内部错误、初始化参数等等信息。

和SQL Server不一样的是,Oracle Alert Log不会在每次实例启动的时候都创建一个新的文件,不管这个Alert Log文件会增长到多大,Oracle都只会维护这一个文件。Alert Log的名字为alert_<instance>.log,其中的<instance>是Oracle实例名。Oracle DBA和SQL Server DBA一样是通过这么一个Alert Log来获得错误诊断所需要的信息。

SQL Server的Error Log和Oracle的Alert Log都是ASCII文本格式的,可以使用任意的文本编辑器打开(译注:Oracle 11g开始提供XML格式的错误日志文件,需要使用ADR打开查看,此前生成文本格式文件的功能依然保留着)。SQL Server Management Studio(Windows界面)也可以用来查看Error Log,Oracle中则可以通过Enterprise Manager Database Control(Web界面)来查Alert Log的内容。

SQL Server的Error Log文件存放的地方由注册表键值决定,默认的位置通常是SQL Server安装目录中的LOG目录之下。而Oracle中Alert Log的位置由初始化参数
BACKGROUND_DUMP_DEST决定,默认情况下通常是在$ORACLE_HOME下面的bdump目录中。


数据库安全

SQL Server和Oracle在数据安全方面最大的一个区别就是访问SQL Server数据库需要经过两步才能完成。在实例级别,SQL Server维护了一个称为登录名(login)的用户帐户列表。在登录名列表中的用户才有权限连接到这个实例,然后用户要访问某个数据库的时候还需要在这个数据库中有一个与登录名对应的用户(user)才行。SQL Server的登录名可以是Windows或是活动目录帐号、有效证书或者是非对称密钥(asymmetric key),登录名也可以是和Windows完全无关的:DBA可以在SQL Server中创建一个用户并且指定一个密码给这个用户,前一类由AD帐号对应的登录名被称为信任(trusted)帐户,后一类登录名称为非信任(non-trusted)帐号。

在Oracle中没有信任与不信任帐户这一说,Oracle中的用户帐户只需要创建一次,不像SQL Server的是Oracle不会将操作系统帐户映射到数据库当中。(译注:实际上Oracle中有种称为OPS$的帐号是和操作系统帐号关联的。)

SQL Server安装之后会自动的创建一个特别的非信任帐号名叫sa(System Administrator的缩写)。sa是一个内置的管理帐号,是实例中所有数据库的所有者,同时还具有数据库的最高权限:sa可以创建、更改或删除登陆名和数据库,修改系统配置,关闭实例或是给其它的用户授予系统管理员的权限。除了这个系统级的sa之外,每个数据库还有一个DBO或称数据库所有者帐户。这个用户会和创建这个数据库的系统级别的主体(pricipal)关联在一起。数据库的所有者对自己的数据库拥有完全的权限,不过这个数据库之外的就不一定了。

Oracle数据创建的时候差不多创建十来个系统界别的账户。默认情况下这写账户中只有四个可用,其它的帐号都被设置成了锁定或是设置为过期状态,这四个帐户就是SYS,SYSTEM,SYSMAN,DBSNMP。这里面的SYS和SYSTEM类似于SQL Server的sa。SYS是数据字典(Oracle数据字典建立在SYS架构之下)的所有者,SYSTEM帐户有着访问数据库中所有对象的权限。

除了sa帐户之外,SQL Server还有一些内置的固定服务器角色(fixed server roles),这些角色和Windows的用户组一样:可以包含一个或者多个登录名。每个角色都有着一套权限,角色里面包含的登录名在整个服务器中有着相同级别的权限。最高权限的服务器角色就是sysadmin了,它和sa的权限是一样的。在Oracle中同样权限的角色是DBA,还有,被赋予SYSDBA和SYSOPER权限的用户也能执行一些诸如启动关闭数据库这样操作的权限。

之前说过SQL Server登录名可以是信任的(Windows帐户)和非信任的,同样的,SQL Server用户也可以做同样的分类:信任的和非信任的。当使用信任帐户(或称Windows帐户)验证时,SQL Server依赖于Windows操作系统执行验证操作,如果用户是一个有效的域帐户或者是本地帐户,SQL Server则不需要它再次提供用户名和密码。使用非信任帐户验证时,SQL Server则要求用户提供的用户名和密码,然后用数据库内部维护的合法用户列表进行对比验证。

在Oracle中用户的验证可以有下面三种方式:

  * 数据字典
  * 密码文件
  * 操作系统(这个和SQL Server的信任连接方式是不一样的)

在这些方法中通过数据字典验证是最常用的,其它的两个方法在数据库不可用或者是实例没有启动的时候有用。普通用户尝试与已经打开的Oracle数据库建立连接的时候就会使用数据字典进行验证,这种方法对普通用户是好用的,但是DBA或者是系统管理员在创建、打开、启动或者关闭数据库的时候这种方式就不可行了,这是因为Oracle实例可以不依赖于数据库而创建和运行,这时候的DBA就成了唯一能在一个空闲的实例中创建和打开数据库的用户了,因为此时没有数据字典供用户验证之用,Oracle就必须要有一种外部的机制来验证用户,这种外部机制可以通过密码文件(password file)或是运行Oracle实例的操作系统来完成。

密码文件中包含了拥有SYSDBA和SYSOPER权限的用户,使用具有这些权限的Oracle用户连接到Oracle之后可以启动实例、 mount、打开数据库、关闭数据库、unmount、关闭实例以及修改数据等等操作。如果用户登录到了运行Oracle实例的机器上时就可用使用操作系统验证登录,当用户使用操作系统验证时,Oracle会检查这个用户是不是在拥有Oracle软件的那个操作系统组里,在Windows服务器中,这个 Windows组叫ora_dba,对于Unix类的操作系统,通常是dba组,如果用户属于其中之一,那他就可以不用提供用户名和密码来访问数据库。

下面的两个例子就演示下这两种验证。

下面的代码表示用户SYS尝试使用密码文件来验证它的SYSDBA权限:
1 CONNECT sys/password@DBNAME AS SYSDBA;

接下来的命令中,用户直接登录到了运行Oracle的主机上,因为这个用户已经通过了操作系统的验证,同时他的账户还属于拥有Oracle软件的用户组中,所以这个用户不需要提供用户名和密码,代之于”/”符号就行:
1 CONNECT / AS SYSDBA;

数据库安装

Microsoft SQL Server的安装是很简单的,基本上DBA只需要知道要安装哪些组件、安装在什么地方以及实例名用什么、字符集设置、验证方式和要安装的目录就行了,准备这些可能要花点时间,不要要启动安装的话只需要双击setup.exe就行了。在群集上安装SQL Server就要花点时间和精力了,不过整个安装过程的界面还是和单机安装很相像的。在安装的最后步骤中会创建相应的注册表键值,以及在程序二进制文件和数据文件目录中创建标准的目录结构,同时还会在数据库实例启动之前创建那五个系统数据库(包括resource)。

虽然说Oracle可以安装在包括UNIX,Linux和Windows在内的多种平台上,不过它的安装程序长相还是一个模样的。它的安装程序是一个基于Java的程序,名为Oracle Universal Install(OUI)。这个OUI可以用来安装 Oracle软件,也可以用它来创建数据库,在创建数据库时调用的能在GUI模式下创建数据库的程序叫做Database Configuration Assistant(DBCA)。

在SQL Server 2008中,典型安装所创建的目录结构如下:

  * %System Root%\Program Files\Microsoft SQL Server\MSSQL10.\MSSQL \Binn:数据库服务器所需要的二进制执行文件。
  * %System Root%\\MSSQL10.\MSSQL\DATA:默认的数据文件所在的位置。
  * %System Root%\\MSSQL10.\MSSQL\LOG:默认的 Error Log文件和维护计划输出所在的位置。
  * %System Root%\\MSSQL10.\MSSQL\Backup:默认的备份文件所在的位置。
  * %System Root%\\MSSQL10.\MSSQL\FTDATA:默认全文索引目录所在的位置。
  * %System Root%\\MSSQL10.\MSSQL\REPLDATA:默认复制快照所在的位置。

默认实例的就是“MSSQL”。SQL Server 2005的目录结构和这个基本一样,就是MSSQL.n中的n会是另外一个数字。因此在一个机器上的第一个实例(默认实例)的数据文件存放的目录就是%System Root%\\MSSQL.1\MSSQL\DATA,在同一个机器上的第二实例的默认数据文件存放目录就是MSSQL.2\MSSQL\DATA,依此类推。

Oracle安装也有一个标准的目录结构,Oracle称之为优化自由结构(Optimal Flexible Architecture, OFA),OFA的基本理念就是将数据库文件放置在一系列标准化的目录中,使得DBA管理数据库变得更轻松,更容易的找到数据文件以及安装多个数据库实例。在Windows中安装Oracle时,安装目录由OUI和DBCA自动创建,在非Windows平台安装时,这些目录要求DBA在安装之前预先创建好,因为UNIX系统中Oracle文件可能会分布在多个挂载点(mount point)上,所以手工创建还是有必要的。

在非Windows平台之上安装Oracle的准备工作之一就是设置环境变量,两个与安装目录相关的环境变量是ORACLE_BASE和ORACLE_HOME。 ORACLE_BASE是Oracle产品所在的根目录,ORACLE_HOME是当前Oracle软件所在的目录,一般来说ORACLE_HOME是在目录ORACLE_BASE下的。

OFA建议安装的时候要有:

  * 应用二进制文件和执行文件放在单独的目录中。
  * Oracle Alert Log,控制文件,初始化参数文件后和trace文件放置在单独的目录中。
  * 数据文件放在单独的目录中。

举个例子来说,在UNIX系统中,Oracle二进制文件放在这样的一个目录之下:/pm/h/u/product/v。

这里的”p”是一个字符串,”m”是数字,合在一起代表这个UNIX文件系统的挂载点。”h”可以是一个代表某个意义的目录,”u”是目录的所有者(在UNIX中,每个目录都有一个所有者,这个NTFS分区安全的概念意义)。再往下”product”是个字串,”v”代表着Oracle的版本。因此一个Oracle二进位文件所在的目录可以为u01/database/oracle/product/10.2.0,在Windows则是这样:C:\oracle\product\10.2.0。

Alert Log,控制文件,初始化参数文件后和trace文件放置的目录则可以是这样的:/pm/h/admin/d/a。

这里的”pm”一样代表着一个UNIX系统的挂载点,”h”表示这个目录的内容,”admin”只是个字串,”d”代表着数据库的SID,”a”则可以是bdump,udump,pfile,cdump这些目录中的一个。因此在Linux系统中,Oracle参数文件所在的目录就可以是/u02/database/admin/orcl/pfile,而在 Windows中同样的文件所在的目录则可以是D:\oracle\product\10.2.0\admin\orcl\pfile。

最后,遵循OFA的标准,对数据文件所在目录的命名可以是/pm/q/d,这里的”pm”同样是挂载点或Windows中Oracle所咋IDE根目录,”q”是个表示文件夹内容的描述性名字(例如:”oradata” 或”datafiles”),”d”是数据库SID。在UNIX系统中,Oracle数据文件所在目录就可以是/u03/oradata/orcl,而在 Windows系统上则可以是E:\oracle\ORADATA\orcl。

现在你应该也猜到了,安装Oracle的步骤要比安装SQL Server更多,特别是在一个非Windows平台上安装时更甚。除了建立目录这些步骤,安装的准备工作还包括修改操作系统参数文件,建立OS组用户,设置环境变量以及以root用户执行shell脚本。

客户端连接

客户端连接是两个平台之间所存在的以外一个有着相同与不同点的地方。我们可以在客户端PC上创建ODBC连接和安装OLE DB驱动来与SQL Server建立连接,在SQL Server安装介质上面的客户端连接工具可以用来安装OLE DB驱动。之后你还可以通过启用TCP/IP或者是NetBIOS来对连接进行调整,或是更改服务器端的端口、在客户端上建立别名。当要在客户端PC上建立DBOC连接时,你必须提供服务器名,连接方式(Windows或者混合)和可选的用户名和密码。对于ADO来说,所有的这些设置都放在连接字符串里边了。

在Oracle上,可以在客户端安装Oracle客户端工具(Oracle client tools)来使用客户端连接。在64位系统上,如果要使SQL Server能连接到Oracle还必须要安装Oracle数据访问组件(Oracle Data Access Component, ODAC)。安装好客户端工具之后,还必须要使用Oracle网络管理器(Net Manager)应用指定目标服务器的名字和属性,要提供的信息包括Oracle服务器的物理名称,服务名称和SID,使用的网络协议和连接端口,这点和使用ODBC连接到SQL Server是基本一样的。要使服务器能接受客户端的连接,Oracle还必须要求在服务器端运行监听(listener)服务。和SQL Server一样,Oracle也允许你是用如同使用SQL Server别名一样给实例指定服务名称(service name)来给客户端使用。

和SQL Server不同的一点就是网络连接的配置文件是保存在ASCII文本文件中的,服务器端的listener.ora文件保持了Oracle监听器所使用的参数,在客户端,tnsnames.ora则保存了用网络管理器工具配置的参数信息。

数据库管理工具

SQL Server DBA经常用来管理数据库实例的工具就是企业管理器(Enterprise Manager)了,SQL Server企业管理器从版本6.5到7.0时有重大的变化,但是2000版本的企业管理器和之前的就没有什么区别了,不过从2005开始这个工具又有了重大的改变,这个工具和其它工具一起整合成为了Management Studio,SQL Server Management Studio(SSMS)使用的是Microsoft的Visual Studio开发环境的标准界面,在2008当中这个工具没有大的变化。

企业管理器或是Management Studio集中管理网络中的多个SQL Server实例。在这个工具当中,DBA可以“注册”数据库实例,查看实例的属性以及修改它们,运行计划任务,在数据库中执行代码以及建立用户帐户等等。这个工具既可以安装在服务器上面,也可以单独的安装在DBA的电脑上。

Oracle中,从10g开始DBA可以使用一个基于Web的界面进行管理,这个工具的名字也是企业管理器(Enterprise Manager),这是一个基于Web界面的工具,没有必要在客户端安装什么工具,DBA只需要用浏览器就可以管理服务器了。

在Oracle 10g和11g中的企业管理器有两个类型。默认情况下会安装的是Enterprise Manager Database Control,DBA可以用Database Control来管理单个数据库实例,而Enterprise Manager Grid Control则需要单独安装并且做一些其它的设置,DBA可以用Grid Control来管理多个数据库以及其它的比如Oracle Application Server之类的应用,这个有点像在SSMS中注册多个SQL Server实例一样。从外观看Database Control和Grid Control基本上是没什么差别的。

DBA可以使用Database Control/Grid Control创建、删除和修改表空间以及用户帐户,配置计划任务,监控性能和修改系统参数。尽管客户端访问用的是浏览器,但是在数据库服务器端却要安装一个叫DBCONSOLE的工具,没有这个工具(在Windows系统上是作为服务运行的),Web界面就无法使用,Grid Control还需要在要监控的服务器上面安装一个特别的“代理”服务。

下表就对这两个平台的管理工具做一个对比:
SQL Server 2000/2005/2008 Oracle 10g / 11g
首先的数据库管理工具就是企业管理器或SSMS,两者都是Windows客户端程序 首选的工具是Enterprise Manager Database Control或Enterprise Manager Grid Control,两者都是基于Web页面的
不需要在数据库服务器上安装特别的服务或程序 需要在数据库服务器端安装DBCONSOL或代理服务才能使用Database Control或Grid Control
可以在客户端上单独安装 不需要安装任何客户端组件

数据库查询工具

在SQL Server 2005之前,数据库开发人员和DBA都使用查询分析器(Query Analyzer)写查询语句或者编写存储过程、视图和函数,查询分析器是一个可以在企业管理器中调用的独立的客户端工具。从2005版开始,SSMS将查询分析器的功能集成在对象浏览器中了。加上集成的Visual Studio界面,还能使用版本管理以及SQL脚本调试这些功能。现在SQL Server还提供了另一个开发工具叫做商业智能开发工具集(Business Intelligence Development Studio, BIDS),这个工具主要用于创建分析服务(Analysis Service),集成服务(Integration Service)和报表服务(Reporting Service)的解决方案。

Oracle就没有绑定这种类似的开发工具了,唯一可以用的就是Oracle自带的SQL*PLUS,SQL*PLUS 是一个记事本分隔的命令行查询工具,大多有经验的DBA都是用SQL*PLUS来快速的完成数据库管理任务。虽然说这个工具有着强大的工具集和命令设置,但是要用它编写以及调试SQL脚本也是个痛苦的事情。

有限的调试工具使得开发人员不得不去使用像Quest公司的TOAD之类的第三方的工具。还好,现在 Oracle开始提供一个免费的开发工具了,叫SQL Developer,10g的时候没有集成到里面,而在11g 中这已经属于标准组件了。SQL Developer支持连接到多个数据库以及编写、调试和执行脚本。我觉得有一点SQL Developer比TOAD好的就是它不需要再单独安装Oracle客户端工具以及配置客户端机器。