1、常用的服务
(1)OracleServiceSID
数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务进程为ORACLE.EXE,参数文件initSID.ora,日志文件SIDALRT.log,控制台SVRMGRL.EXE、SQLPLUS.EXE。
注:SID - 数据库标识 如Orcl
(2)OracleHOME_NAMETNSListener
监听器服务,服务只有在数据库需要远程访问时才需要(无论是通过另外一台主机还是在本地通过 SQL*Net网络协议都属于远程访问),不用这个服务就可以访问本地数据库,它的缺省启动类型为自动。服务进程为TNSLSNR.EXE,参数文件Listener.ora,日志文件listener.log,控制台LSNRCTL.EXE,默认端口1521、1526。
(3)OracleDBConsoleorcl--可以不启动,用于管理Oracle的企业管理器的服务.
(4)OracleJobSchedulerORCL--通常不启动,用于定期操作任务的服务
(5)OracleOraDb10g_home1iSQL*Plus--可以不启动,这是isqlplus服务,用于用网页执行sql执行,11g已经取消了这个功能
(6)OracleSNMPPeerMasterAgent
SNMP服务代理,用于支持SNMP的网管软件对服务器的管理,除非你使用网管工具监控数据库的情况,否则不需要启动,它的缺省启动类型是手动。服务进程为AGNTSVC.EXE,参数文件MASTER.CFG,默认端口161。
(7)OracleSNMPPeerEncapsulater
SNMP协议封装服务,用于SNMP协议转换,除非你使用一个不兼容的SNMP代理服务,否则不需要启动,它的缺省启动类型是手动。服务进程为ENCSVC.EXE,参数文件ENCAPS.CFG,默认端口1161。
(8)OracleHOME_NAMEManagementServer
OEM管理服务,使用OEM时需要,它的缺省启动类型是手动。服务进程为OMSNTSVR.EXE,日志文件oms.nohup。
2、 数据库启动的步骤
分3步,对应3个状态:
① 创建并启动实例(初始化参数文件)
根据数据库初始化参数文件,为数据库创建实例,启动一系列后台进程和服务进程,并创建SGA区等内存结构。
② 装载数据库(控制文件)
实例打开数据库的控制文件,从中获取数据库名称、数据文件和重做日志文件的位置、名称等数据库物理结构信息,为打开数据库做好准备。如果控制文件损坏,实例将无法装载数据库。
③ 打开数据库(数据文件与重做日志文件)
实例将打开所有处于联机状态的数据文件和重做日志文件。如果任何一个数据文件或重做日志文件无法正常打开,数据库将返回错误信息,这时数据库需要恢复。
3、 数据库启动的三种模式
NOMOUNT:创建并启动数据库实例,对应数据库启动的第一个步骤
MOUNT:启动实例并装载数据库,对应数据库启动的第二个步骤
OPEN:启动实例、装载并打开数据库,对应数据库启动的第三个步骤
启动数据库的基本语法 :
STARTUP [NOMOUNT|MOUNT|OPEN|FORCE][RESTRICT][PFILE=filename]
(1)STARTUP NOMOUNT
读取数据库初始化参数文件,创建并启动数据库实例。在NOMOUNT模式下可以执行下列操作:
创建一个新的数据库
重建数据库的控制文件
(2)STARTUPMOUNT
根据CONTROL_FILES参数找到数据库的控制文件,读取控制文件获取数据库的物理结构信息,实现数据库的装载 。在MOUNT模式下可以执行下列操作:
重命名数据文件
添加、删除或重命名重做日志文件
改变数据库的归档模式
执行数据库完全恢复操作
(3)STARTUP[OPEN]
任何具有CREATE SESSION权限的用户都可以连接到数据库,并可以进行基本的数据访问操作。
(4)STARTUPFORCE
用于当各种启动模式都无法成功启动数据库时强制启动数据库。
在下列情况下,需要使用STARTUP FORCE命令启动数据库:
1)无法使用SHUTDOWN NORMAL,SHUTDOWN IMMEDIATE或SHUTDOWN TRANSACTION语句关闭数据库实例。
2)在启动实例时出现无法恢复的错误。
(5)STARTUPRESTRICT (以受限方式打开数据库)
只有具有CREATE SESSION和RESTRICTED SESSION(通常只有DBA具有)系统权限的用户才可以连接数据库。下列操作需要使用STARTUPRESTRICT方式启动数据库:
执行数据库数据的导出或导入操作;
执行数据装载操作;
暂时阻止普通用户连接数据库;
进行数据库移植或升级操作。
(6)STARTUPPFILE[=path\filename] (使用非默认的初始化参数文件)
若不指定,则打开默认服务器端初始化参数文件;若没有,则打开默认文本文件 ;如果还没有,则启动失败。
4、数据库关闭的步骤
和启动数据库对应的也分为3步,对应三个状态:
① 关闭数据库 (关闭数据文件与重做日志文件)
Oracle将重做日志缓冲区内容写入重做日志文件中,并且将数据高速缓存中的脏缓存块写入数据文件,然后关闭所有数据文件和重做日志文件。
② 卸载数据库 (关闭控制文件)
数据库关闭后,实例卸载数据库,关闭控制文件。
③ 关闭实例 (释放内存、关闭后台进程)
卸载数据库后,终止所有后台进程和服务器进程,回收内存空间。
5、关闭数据库的各种方式
关闭数据库的基本语法
SHUTDOWN [ NORMAL | TRANSACTION | IMMEDIATE |ABORT ]
(1)SHUTDOWN[ NORMAL ] (对关闭无时间限制)
阻止任何用户建立新的连接;等待当前所有正在连接的用户主动断开连接;一旦所有用户断开连接,则关闭数据库;数据库下次启动时不需要任何实例的恢复过程。
(2)SHUTDOWNIMMEDIATE (尽可能在短时间内关闭)
阻止任何用户建立新的连接,也不允许当前连接用户启动任何新的事务;回滚所有当前未提交的事务;终止所有用户的连接,直接关闭数据库;数据库下一次启动时不需要任何实例的恢复过程。
(3)SHUTDOWNTRANSACTION(尽可能在短时间内关闭,并保证行动事务可以提交)
阻止所有用户建立新的连接,也不允许当前连接用户启动任何新的事务;等待用户回滚或提交任何当前未提交的事务,然后立即断开用户连接;关闭数据库;数据库下一次启动时不需要任何实例的恢复过程。
(4)SHUTDOWNABORT(前3种方法无法成功关闭数据库,则用。会丢失一部分数据,对数据库完整性造成损害)
阻止任何用户建立新的连接,同时阻止当前连接用户开始任何新的事务;立即结束当前正在执行的SQL语句;任何未提交的事务不被回滚;中断所有的用户连接,立即关闭数据库;数据库实例重启后需要恢复。
6、数据库状态转换
数据库启动后,可根据数据库管理或维护的需要,将数据库由一种状态转换到另一种状态。
(1)启动模式间转换
SQL>STARTUP NOMOUNT;
SQL>ALTER DATABASE MOUNT;
SQL>ALTER DATABASE OPEN ;
(2)读写状态转换
SQL>ALTER DATABASE OPEN READ WRITE ;
SQL>ALTER DATABASE OPEN READ ONLY;
(3)受限/非受限状态转换(启动时默认是非受限的)
SQL>ALTER SYSTEM ENABLE RESTRICTEDSESSION;
SQL>ALTER SYSTEM DISABLE RESTRICTEDSESSIOIN;
(4)静默状态/非静默状态转换
所谓的静默状态是指只允许DBA用户(在Oracle10g中,只允许SYS用户和SYSTEM用户)在数据库中执行查询、更新等事务操作,以及运行PL/SQL程序,而其他所有用户都不能在数据库中执行任何操作。
下列操作需要在静默状态下进行:
① DBA在执行操作的过程中,如果有其他用户访问操作的对象,那么将导致DBA操作失败。
② DBA的某些操作在执行过程中所产生的中间结果不应当被其他用户看到。
1)进入静默状态(等所有非DBA用户会话主动终止后才进入静默状态)
SQL>ALTER SYSTEM QUIESCE RESTRICTED;
2)退出静默状态
SQL>ALTER SYSTEM UNQUIESCE;
3)查询静默状态
查询动态性能视图V$INSTANCE的ACTIVE_STATE列查看数据库的当前状态:
SQL>SELECT ACTIVE_STATE FROM V$INSTANCE;
NORMAL:正常非静默状态;
QUIESCING:正在进入静默状态,等待非DBA会话进入停止状态;
QUIESCED:静默状态,所有非DBA会话都进入停止状态。
(5)挂起与非挂起状态转换
当数据库处于挂起状态时,对数据库的数据文件和控制文件的I/O操作都被暂停。可以保证在没有I/O冲突状态下进行数据库的备份操作。与静默状态不同,挂起状态不禁止非DBA用户进行数据库操作,只是暂时停止所有用户的I/O操作。当前所有的I/O可以继续完成。当数据库处于挂起状态时,可以为系统中的磁盘或文件创建镜像,然后分离镜像,从而为数据库的备份与恢复提供了一种可选方案。
1)进入挂起状态
SQL>ALTER SYSTEM SUSPEND;
2)退出挂起状态
SQL>ALTER SYSTEM RESUME;
3)查询挂起状态
查询动态性能视图V$INSTANCE的DATABASE_STATUS列查看数据库是否处于挂起状态:
SQL>SELECT DATABASE_STATUS FROMV$INSTANCE;
DATABASE_STATUS列的取值有两种。SUSPENDED:挂起状态; ACTIVE:正常状态。