一、数据库启动原理
1、启动实例(Start An Instance)
当启动实例时,Oracel会读取一个参数文件,这个文件可以是初始化参数文件(Initializaion Paramenter File, PFILE),也可以是服务器端参数文件(Server Paramenter Files, SPFILE),通常,把两都都和称为参数文件。
Oralce根据参数文件中的参数,分配相应大小的一片内存区域叫系统全局区(System Global Area, SGA),然后启动一系列的后台进程(SMON、PMON、ARCH等),SGA与进程组成实例。
实例是用来驱动数据库的,一台机器上可同时运行多个实例,每个实例有自己的名字SID。RAC环境中多个实例可同时驱动一个数据库。
实例启动完成后,数据库处于NOMOUNT状态,数据库还没有和实例关联。此时数据库不可访问,这个阶段主要用于数据库的编护(如重建控制文件)。
参数文件(PFILE或SPFILE)还指定上了控制文件(Control File)的位置。
PFILE是文本文件,SPFILE是二进制文件,它们是两种完全不同的文件,不能在命令行中时显式使用SPFILE来启动数据库。
如:SQL>STARTUP 默认使用SPFILE启动数据库,注:需要有SYSDBA权限
SQL>STARTUP PFILE='/oracle/app/oracle/product/10.1.0/db_1/dbs/initorcl.ora';
重建SPFILE:CREATE SPFILE FROM PFILE='D:\oracle\app\oracle\product\10.1.0\db_1\dbs\initorcl.ora';
2、装载数据库(Mount The Database)
Oracle根据参数文件(PFILE或SPFILE)中的参数(CONTRIL_FILES)找到控制文件(Contril File),然后打开控制文件。从控制文件中获得数据文件(Datafile)和联机日志文件(Redo Log File)的名字及位置。这时Oracle已将实例(Instance)和数据库关联起来,对于普通用户来说,数据库还是不可访问。
处于MOUNT阶段的数据库,主要用于数据库的维护(如:恢复数据库等)
3、打开数据库(Open The Daabase)
当打开数据库的时候,Oracle打开数据文件(Datafile)和联机日志文件(Redo Log File)。这时,数据库可以使用。普通用户可登录数据库,对数据库进行操作。
1、数据启动到NOMOUNT状态,只启动实例
C:>STARTUP NOMOUNT
ORACLE instance started.
Total System Global Area
289406976 bytes
Fixed Size
1248600 bytes
Variable Size 92275368 bytes
Database Buffers 192937984 bytes
2、数据启动到MOUNT状态,在启动STARTUP之后指定启动选项MOUNT,MOUNT状态不仅打开了实例,还打开了控制文件,从控制文件中读取了数据文件和联机日志文件的名称和位置。
注:启动到MOUNT的状态的过程,还包括启动到NOMOUNT的过程
C:>STARTUP MOUNT
ORACLE instance started.
Total System Global Area
289406976 bytes
Fixed Size
1248600 bytes
Variable Size 92275368 bytes
Database Buffers 192937984 bytes
Redo Buffers 2945024 bytes
注:将数据库从Nomount状态变为MOUNT状态:
C:>ALTER DATABASE MOUNT
打开数据库:
1、若数据库是关闭的:
SQL>STARTUP
2、若数据库是NOMOUNT:
SQL>ALTER DATABASE MOUNT
SQL>ALTER DATABASE OPEN
3、若数据库是MOUNT:
SQL>ALTER DATABASE OPEN
4、一步步启动数据库:
SQL>STARTUP NOMOUNT;
SQL>ALTER DATABASE MOUNT;
SQL>ALTER DATABASE OPEN;
5、利用特定的初始化参数文件启动数据库,initorcl.ora为初始化参数(PFILE)的文件名。
SQL>STARTUP PFILE='/oracle/app/oracle/product/10.1.0/db_1/dbs/initorcl.ora';
ORACLE instance started.
Total System Global Area
289406976 bytes
Fixed Size
1248600 bytes
Variable Size 92275368 bytes
Database Buffers 192937984 bytes
Redo Buffers 2945024 bytes
Database Mounted.
Database Opened.
6、将数据库启动到限制模式(RESTRICT),作用:
(1)执行数据的导入/导出(import/export)
(2)执行数据的装载(SQL*Loader)
(3)阻止某些用户访问数据
(4)执行某些升级和迁移操作
a、若数据库已关闭:
SQL>STARUP RESTRICT;
ORACLE instance started.
Total System Global Area
289406976 bytes
Fixed Size
1248600 bytes
Variable Size 92275368 bytes
Database Buffers 192937984 bytes
Redo Buffers 2945024 bytes
Database Mounted.
Database Opened.
b、若数据库已启动:
SQL>ALTER SYSTEM enable restricted session;
7、以只读模式(Rready Only)打开数据库
只读模式下,数据文件和联机日志文件都禁止写操作,整个数据库是只读的。允许执行数据库恢复(Database Recovery)及其它不会产生回滚的操作。
(1)如果数据库没有启动:
SQL>STARUP OPEN READ ONLY;
查看数据库是否以只读方式打开:
SQL>SELECT open_mode From V$database;
(2)若数据库处于MOUNT状态:
SQL>Alter database open read only;
8、如何把数据库启动到恢复模式(RECOVER),用于数据库的介质恢复
SQL>STARTUP OPEN RECOVER;
9、重新启动数据库(RESET)
SQL>STARTUP FORCE;
STARTUP FORCE命令先调用STARTUP ABORT来关闭数据库,然后再用STARTUP命令,按照正常方式启动数据库。
注:此命令会执行实例恢复的过程,在系统正常的情况下,不推荐使用这个命令,还是应该按照正常的顺序启动/关闭数据库。
10、查看数据库状态:
(1)NOMOUNT状态
SQL>SELECT OPEN_MODE FROM V$DATABASE; 显示:ORA-01507: database not mounted
SQL>SELECT STATUS FROM V$instance; 显示为:STARTED
以上两条记录说明:实例已启动,但没有Mounted,所以为Nomount状态
NOMOUNT状态时,打开数据库要经过两步,不能直接打开数据库:
SQL>ALTER DATABASE MOUNT;
SQL>ALTER DATABASE OPEN;
(2)MOUNT状态
SQL>SELECT OPEN_MODE FROM V$DATABASE; 显示:mounted
SQL>SELECT STATUS FROM V$instance; 显示为:mounted
以上两条记录说明:为MOUNT状态
(3)OPEN打开状态
SQL>SELECT OPEN_MODE FROM V$DATABASE; 显示:READ WRITE
SQL>SELECT STATUS FROM V$instance; 显示为:OPEN
以上两条记录说明:为OPEN状态
ORA-02778: Name given for the log directory is invalid
说明BACKGROUND_DUMP_DEST指向的目录不存在。
1、建立新目录:/wxx/oracle/dbump,并设读写权限
2、修改初始化参数文件(PFILE),使BACKGROUND_DUMP_DEST=/wxx/oracle/dbump
3、重启数据库
警报文件(Alert File)
跟踪文件(Trace File)