Oracle数据库在NT平台的系统优化策略

  本文基于Oracle对平台的依赖性,以NT平台为例,描述Oracle在NT平台上的一些特点,提供一个Oracle系统优化的思路。

  当前,Oracle作为大型数据库管理系统快速发展,如何更好的发挥其强大的数据管理功能?这成为Oracle系统优化方面一个不可忽视的问题。有专门文章从系统参数等软件内部挖掘其"潜力",本文尝试从Oracle与外部环境的特定关系,即Oracle的平台依赖性着手,主要以NT平台为例,就Oracle的平台依赖性的各个方面进行描述。

  1.Oracle在NT平台下仅仅是一个多线程(Multiple Threads)操作系统进程(Process)

  在NT平台下,Oracle的每一个后台"进程"(如LGWR、DBWR等)和专用服务"进程"都是Oracle进程的一个子线程。这种多线程结构(Muli_threaded Architecture)在NT上是非常高效的,因为所有子线程都共享同一主进程的资源。如果你添加一个Oracle实例(Instance),才会有一个新的Oracle进程,这个新的进程同样拥有。在NT平台下,操作系统并不给每个Oracle线程标志诸如LGWR、DBWR之类的名字。如果想查看有关线程信息,可以通过SQL语句来查询数据字典(Data Dictionary)中的相关表(Table)和视图(View)。

  例如,查看关于DBWR线程的内部编号信息:

  select b.name , p.spid
        from v$bgpross b , v$process p
        where b.paddr=p.addr  
        and   name='DBWR'

  另外,Oracle的系统性能监测工具也提供了一种查看线程信息的简单方法。

  2.空间限制

  在NT平台上,Oracle实例和所有连接用户的地址空间都限制在2GB内,而在Win9x平台上,这个限制则在3GB内。因为对于NT或Win9x , 一个进程的地址空间都限制在4GB内,而对于NT平台来说,还要预留2GB给系统资源,如缓冲区,堆栈等,对Win9x来说,预留的空间为1GB 。NT支持两种主要的文件系统: FAT 和 NTFS。Oracle可以在这两种文件系统下安装,但有两个问题需要考虑到。

  首先就是安全性。FAT文件系统不支持文件级安全保护,每个登录到NT服务器上的用户都可以删除FAT文件,而NTFS文件系统支持类似于Unix的文件级安全保护,用户只能存取他拥有存取权利的文件。

  第二个就是文件的最大限制。一个FAT文件最大是4GB,而一个NTFS文件从技术上讲最大可达到32GB。Oracle在NT平台下每个数据文件最多能有4百万个数据块(Data Block),如果按每个块8KB大小计算,那么一个数据文件就有32GB,而一个数据库(Database)最多可有1022个数据文件,那么这个数据库最大可达到32TB 。

  NT支持"裸"磁盘分区(raw disk partition)。每个裸分区可以不经过系统格式化而分配一个驱动器符,直接用于Oracle存放数据文件、日志文件或控制文件。与Unix平台相似,每个裸分区都直接对应唯一的一个Oracle 数据文件、日志文件或控制文件,两种平台的区别仅在于文件命名习惯不同。

  例如,在SQL语句中可以这样引用裸分区:

  DATAFILE '\\.\f:' SIZE 49M REUSE

  这里的f: 就是对应一个裸分区的盘符。而且习惯上,定义的Oracle文件大小通常都比裸分区的大小要小1MB,来避免写到磁盘的0柱面上。

  3.参数

  在NT平台上有一些针对Oracle的注册表参数,这些参数类似于Unix平台上的Shell变量。

  例如,注册表中的参数Oracle_home和Oracle_SID都是Oracle安装程序在安装时自动在注册表中定义的。Oracle实例也是作为一个服务(service)定义在注册表中的,可以在NT的"控制面板"的"服务"项中看到。Oracle在NT平台上只支持单一的Oracle_home目录,(最新版Oracle中有所改进),当在NT上安装不同版本的Oracle时,所有版本都共享同一目录结构,Oracle_home/bin,不同版本的执行文件分别以版本号来互相区别,如Oracle72.exe , Oracle73.exe 。 在注册表中Oracle_home参数定义在HKEY_LOCAL_MACHINE/software/Oracle/这些参数也可以通过注册表程序regedit手工编辑重新设定值。

  4.事件查看和系统性能监测

  在NT平台上,有事件查看器(Event Viewer)和系统性能监测器(Performance Monitor utilities)来监测Oracle相关信息。

  当Oracle启动或关闭时都会在时间查看器中添加一条记录,NT系统管理员可以通过查看事件查看器里的记录信息来检查是否有关于Oracle的警告信息,如果设置了Oracle审计(audit)选项,还可以在事件查看器中查看到相关审计记录。

  系统性能监测器提供了关于所有进程的详细数据,包括与Oracle有关的一些资源统计数据,如文件读出字节/秒,数据缓冲命中率等等 。

  尽管你在NT平台上运行多个Oracle实例,事件查看器和系统性能监测器只收集在注册表参数Oracle_SID中所标明的那个实例有关数据。

  5.安全性

  在第2点中也提到过,要访问一个数据库,必须首先能够以直接或间接方式访问正在运行该数据库的服务器,要使数据库安全,首先要其依赖的平台和网络安全,一旦开始执行,操作系统的安全性必须被考虑。

  Oracle使用大量用户不能直接访问到的文件。例如,数据文件和日志文件只有通过Oracle的后台处理进行读写。因此,只有要建立和删除这些文件的DBA才可以在操作系统级直接访问它们。输出文件和其他的备份文件也必须受到保护。

  一般情况下,除了数据库本身的用户名和口令帐号外,可以利用平台特性提供一个用户认证的附加级,及操作系统帐号。但在同一服务器中,一个数据库帐号可以和一个操作系统帐号配成对,仅仅是前缀不同。缺省前缀为"OPS$",但可以通过数据库的OS_AUTHENT_PREFIX参数修改其值。这个前缀也可以设置成空字符串,不用前缀。

  在NT平台上与Oracle核心相连(CONNECT INTERNAL)需要专门口令,这个密码是在安装时定义的,缺省情况下是存放在一个隐含文件pwd.ora中。该文件位于$Oracle_home/database 目录。

  如果在init.ora文件中设置:

  DBA_AUTHORIZATION=BYPASS

  或注册表中修改:

  HKEY_LOCAL_MACHINE/software/Oracle/DBA_AUTHORIZATION

  设置其值为BYPASS,那么DBA与核心相连就不需要密码了。这点也是需要特别注意的。

  系统优化是一个复杂,牵涉面很广的问题,上面几点主要是从Oracle对平台的依赖性方面来考虑如何进行系统优化,希望能给大家提供一个进行系统优化的思路。