如果在Windows操作系统上部署Oracle数据库系统,会将起动过程写入到操作系统的服务列表中。并且一些主要的服务都会被设置为自动启动。如此的话,当操作系统启动的时候,数据库会自动启动。当关闭操作系统时这些服务也会自动关闭。如下图所示,就是在Windows操作系统下的Oralce数据库系统的典型服务。
一、了解主要的Oracle数据库服务。
虽然上图中列举出了很多的Oracle数据库服务,但是在实际过程中我们用到的只是其中的四种。分别为OracleTNSListener(上图中的第二个服务,这服务对应于数据库的监听程序)、OracleServiceDTM123(上图中的***个服务,对应于数据库例程)、OracleDBConsoledmt123(上图中***一个服务,对应于数据库的企业管理器)、OracleiSQL*Plus(上图中的第五个服务,对应于数据库的Isql*plus工具)。数据库管理员必须要对这四个服务的作用以及相互之间的关系了如指掌。因为有时候处于维护的需要,数据库管理员需要通过这个服务列表来管理数据库的启动与关闭。
如当启动这些数据库服务的时候,会占用比较多的内存、CPU等系统资源。有时候在Windows操作系统上安装Oracle数据库系统可能只是出于测试、培训等目的。为此没有必要让这些数据库服务一直运行着,而影响操作系统上的其它服务。所以有时候数据库管理员不希望这些数据库服务随着操作系统的启动而自动启动。他们希望能够在需要的时候手工启动这些服务。如此的话,在不需要用到数据库的时候,这些服务就不会占用宝贵的例程。此时数据库管理员就需要更改这些服务的启动方式。如上图所示,可以将以上四种服务设置为“手动”启动方式。如此的话,数据库系统不会随着操作系统的启动而自动启动。如果需要更改这些服务的启动方式,只需要选中以上对应的服务,双击这个服务,会打开一个服务管理的对话框。在这个对话框内我们可以发现有一个启动类型的下拉列表,只要选择“手动”,即可以更改这些服务的启动方式。默认情况下,这个启动类型为“自动”。如果一直不需要使用这些服务,甚至可以将启动类型设定为“已禁用”。
二、了解各种服务之间的关系。
Oracle各种服务之间有着比较复杂的关系,这个复杂性主要体现在他们有很严格的相互依存关系。当启动某个服务或者关闭某个服务的时候往往需要按照一定的顺序来启动或者关闭。否则的话,可能会出现错误信息。如就以上面四种主要服务来说,他们之间的关系就比较复杂。一般情况下,只有先启动OracleTNSListener(监听程序)服务,才可以打开启动服务。如果在没有打开这个服务的情况下,而打开其他数据库服务,如OracleDBConsoledmt123(数据库企业管理器)服务,就会出现错误。系统会提示:“一些服务依赖于其它服务、系统驱动程序或者组的加载顺序,如果系统组建被停止或者运行不正常,则依赖于它的服务会受到影响”。简单的说,就是监听程序服务没有打开的话,企业管理器服务就无法启动。这两个服务之间存在着依存的关系。类似的,企业管理器服务跟OracleServiceDTM123(数据库例程)服务之间也存在着千丝万缕的关系。如果要使用企业管理器服务,那么必须先启动数据库例程服务。否则的话,又会抛出以上的异常信息。
数据库服务在启动的时候会受到以上限制因素的影响。在关闭这些服务的时候也是如此。不过比服务启动的时候好的多,操作会在关闭服务的时候去自动检测是否存在相关的依存服务。如果存在的话,会先自动关闭其它的服务,然后再关闭这个服务。如现在操作系统中同时启动了数据库企业管理器服务与数据库例程这两个服务。现在数据库管理员暂时不用Oracle数据库了,他就要关闭数据库例程服务以释放其占用内存与CPU资源。此时在关闭这个服务的时候,操作系统发现现有启动的服务(企业管理器)需要用到这个正在关闭的服务。此时操作系统会先关闭企业管理器服务,然后再关闭数据库例程服务。也就是说,服务在启动的时候,如果服务之间存在依存关系,操作系统是不会自动启动的。而是抛出异常信息,让数据库管理员手工启动相关联的服务。但是在关闭服务的时候,则如果遇到相互依存的服务,操作系统会自动关闭相互依存的服务。为此在关闭某个服务的时候,数据库管理员一定要了解他们之间相互依存关系。要防止为了关闭某个服务,而同时关闭其它正在使用的服务。此时可能会给用户造成不必要的损失。
三、利用服务启动数据库与利用命令启动数据库的差异。
在使用命令启动数据库的时候,可以利用不同的选项让数据库启动在不同的状态中。如通常情况下利用命令来启动数据库,带上不同的选项,可以让数据库只启动例程(带上Nomount选项)、挂载数据库而不打开数据库(采用mount选贤)、打开数据库(采用open选项)或者以受限模式(带上restrict选项)打开数据库系统。有时候以某种特定的方式来打开数据库系统对于数据库管理员维护数据库是非常重要的。如数据库管理员需要将某个数据库文件移动到新的硬盘上以减少硬盘的I/Q冲突或者需要将数据库从非归档模式转换到归档模式的时候,就需要将数据库启动到挂载模式。即打开控制文件而没有打开数据文件。此时可以更改控制文件中的内容(控制文件已经打开);也可以移动数据文件(数据文件在挂载模式下还没有打开。只有在这个模式下才能够完成对数据文件的更名、移动等操作。而且利用命令还可以在不同的模式下进行转换。如现在处于数据库挂载模式,则可以利用alter database open命令将数据库转换为打开模式。这些功能通过Oracle服务都是无法完成的。
而通过服务来控制数据库的启动与关闭,就不能够做到这么精细的控制。一般情况下,只有监听程序服务、数据库例程服务和数据库企业管理器服务三个服务同时打开的情况下,对应的数据库才处于启动状态。或者说,只有数据库企业管理器服务启动时数据库才处于打开状态。因为只有有监听程序服务、数据库例程服务这两个服务启动后,才可以启动企业管理器服务。所以一般情况下,企业管理器服务启动了,就表示这三个服务已经同时启动。如果有一个服务还处于关闭的状态,那么数据库就是处于关闭状态。
可见通过命令与通过服务来管理数据库的启动与关闭存在很多的差异。一般情况下笔者建议大家还是通过命令来维护数据库的启动与关闭操作为好。不过通过服务,也可以起到一些命令无法实现的功能。如现在数据库管理员不希望数据库随着操作系统的启动而自动启动,此时就可以通过更改对应服务启动类型来实现。如可以将上面的服务的启动类型设置为“手工”启动。此时当操作系统启动时,就不会自动启动数据库系统。不过这主要用于一些测试服务器或者培训服务器上。对于在企业生产环境中使用的数据库服务器,往往要将这个服务设置为自动启动。即让操作系统启动时自动启动数据库服务,以减少数据库管理员的工作量。所以说,虽然通过服务来管理数据库的启动与关闭进程,属于粗放型的管理。但是有时候数据库管理员确实也离不开它。
***需要提醒的一点是,在Windows操作系统中,默认情况下数据库系统是会随着操作系统的启动而自动启动的。而在Linux等到作系统平台上,由于没有这种服务的管理机制,所以在Linux操作系统部署Oracle数据库系统的时候,默认情况下是不会随着操作系统的启动而启动的。如果数据库管理员需要让其随着操作系统启动而自动启动,就需要在启动列表中加入相关的指令才行。这是在两个不同操作系统上部署Oracle数据库的一个很明显的区别。
【编辑推荐】