<!--[if !supportLists]-->一、<!--[endif]-->实例的启动与关闭
<!--[if !supportLists]-->(一)、<!--[endif]-->启动实例阶段(STARTED)
<!--[if !supportLists]-->1.<!--[endif]-->打开的文件
<!--[if !supportLists]-->1) <!--[endif]--> 警告日志文件
//启动实例前执行,查看进程是否打开
[oracle@oracle ~ ]$ ps -ef | grep ora_
oracle 4809 4776 0 09:10 pts/2 00:00:00 grep ora_//未打开
[oracle@oracle trace ]$ tail -f alertorcl.log//文件尾部打开,并持续输出
SQL> STARTUP NOMOUNT;
ORACLE instance started.
//启动后分配了内存,并显示在输出
Total System Global Area 636100608 bytes
Fixed Size 1338392 bytes
Variable Size 377488360 bytes
Database Buffers 251658240 bytes
Redo Buffers 5615616 bytes
//启动实例后执行,发现进程已经打开
[oracle@oracle ~]$ ps -ef | grep ora_
oracle 4884 1 0 09:11 ? 00:00:00 ora_pmon_orcl
oracle 4886 1 0 09:11 ? 00:00:00 ora_vktm_orcl
oracle 4890 1 0 09:11 ? 00:00:00 ora_gen0_orcl
oracle 4892 1 0 09:11 ? 00:00:00 ora_diag_orcl
oracle 4894 1 0 09:11 ? 00:00:00 ora_dbrm_orcl
oracle 4896 1 0 09:11 ? 00:00:00 ora_psp0_orcl
oracle 4898 1 0 09:11 ? 00:00:00 ora_dia0_orcl
oracle 4900 1 1 09:11 ? 00:00:01 ora_mman_orcl
oracle 4902 1 0 09:11 ? 00:00:00 ora_dbw0_orcl
oracle 4904 1 0 09:11 ? 00:00:00 ora_lgwr_orcl
oracle 4906 1 0 09:11 ? 00:00:00 ora_ckpt_orcl
oracle 4908 1 0 09:11 ? 00:00:00 ora_smon_orcl
oracle 4910 1 0 09:11 ? 00:00:00 ora_reco_orcl
oracle 4912 1 0 09:11 ? 00:00:00 ora_mmon_orcl
oracle 4914 1 0 09:11 ? 00:00:00 ora_mmnl_orcl
oracle 4916 1 0 09:11 ? 00:00:00 ora_d000_orcl
oracle 4918 1 0 09:11 ? 00:00:00 ora_s000_orcl
oracle 5025 4776 0 09:13 pts/2 00:00:00 grep ora_
------------------------------以下为警告日志文件内容节选---------------------------
//读取参数
System parameters with non-default values:
//限制进程数
processes = 150
//限制内存大小,并进行自动内存管理
memory_target = 608M
//控制文件的路径和名称
control_files = "/u01/app/oracle/oradata/orcl/control01.ctl"
control_files = "/u01/app/oracle/flash/orcl/orcl/control02.ctl"
control_files = "/u01/app/oracle/oradata/orcl/control03.ctl"
//数据库标准块大小
db_block_size = 8192
//Oracle数据库版本号
compatible = "11.2.0.0.0"
//UNDO表空间的名字(将在后面章节介绍)
undo_tablespace = "UNDOTBS1"
//是否允许远程登录的相关配置
remote_login_passwordfile= "EXCLUSIVE"
//数据库审计信息
audit_file_dest = "/u01/app/oracle/admin/orcl/adump"
//数据库后台进程追踪文件和警告日志文件
background_dump_dest = "/u01/app/oracle/admin/orcl/bdump"
//核心的追踪信息
core_dump_dest = "/u01/app/oracle/admin/orcl/cdump"
//SQL和会话的追踪信息
user_dump_dest = "/u01/app/oracle/admin/orcl/udump"
//数据库名
db_name = "orcl"
... ...
//启动进程
Fri Nov 29 09:11:07 2013
DBW0 started with pid=10, OS id=4902
Fri Nov 29 09:11:07 2013
LGWR started with pid=11, OS id=4904
Fri Nov 29 09:11:07 2013
......
发出“startup nomount”指令后,我们注意到警告日志文件输出了包括一系列参数、进程的启动等内容;同时,我们注意到SQLPLUS终端回显了内存的大小设置(上图红字)。
因此,我们首先可以确定的是,在该阶段Oracle实例分配了内存,启动了进程。
那么,警告日志文件中的参数从哪来呢?下面让我们观察一下初始化参数文件。
<!--[if !supportLists]-->1) <!--[endif]--> 初始化参数文件
前面已经介绍过,初始化参数分为两种。静态初始化参数文件和动态初始化参数文件。
静态初始化参数文件(Pfile):文本形式、默认文件名:initsid.ora
动态初始化参数文件(Spfile):二进制形式、默认文件名:spfilesid.ora
也就是说,我们想要了解初始化参数文件的内容,可以使用vi工具或者多种操作系统指令来查看静态初始化参数文件的内容。
如果没有静态初始化参数文件或者动态初始化参数文件(二缺一),该怎么办呢?
我们可以通过指令来创建初始化参数文件并查看静态初始化参数文件的内容:
//通过动态初始化参数文件创建静态初始化参数文件
SQL> create pfile from spfile;
File created.
//通过静态初始化参数文件创建动态初始化参数文件
SQL> create spfile from pfile;
File created.
[oracle@oracle dbs]$ more initorcl.ora
orcl.__db_cache_size=251658240
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=255852544
orcl.__sga_target=381681664
......//这里以_开头的为隐含参数,为了使用ASMM特性而存在的
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fl
ash/orcl/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'
*.db_block_size=8192
*.db_name='orcl'
*.memory_target=635437056
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace= "UNDOTBS1"
......//原来警告日志文件中的参数是从这里(初始化参数文件)来的
<!--[if !supportLists]-->2.<!--[endif]-->步骤
1> 验证口令文件,连接SQL * PLUS
2> 发出STARTUP NOMOUNT指令
3> 打开警告日志文件并记录日志
4> 读取初始化参数文件
5> 分配内存、启动进程
当启动实例时,系统首先要读取初始化参数文件,如图1-2所示。
然后根据初始化参数文件的设置分配系统全局区(SGA),并启动Oracle后台进程。
另外,操作系统还会打开“警告日志文件”,并且将启动信息存放到“警告日志文件”中。警告日志存放在初始化参数background_dump_dest所对应的目录中,其文件名格式为alertsid.log。
注意:Oracle默认打开初始化参数文件的顺序是:
Spfilesid.ora → spfile.ora → initsid.ora
如果三个文件都不存在,则报错。
图1-2 实例的启动
<!--[if !supportLists]-->
3.<!--[endif]-->可执行的相关操作
<!--[if !supportLists]-->● <!--[endif]-->创建数据库
<!--[if !supportLists]-->● <!--[endif]-->创建控制文件
Question:为什么创建控制文件和创建数据库都需要在nomount状态下?
Tips:想不明白的话,就在后面的章节中找答案吧!
<!--[if !supportLists]-->(二)、<!--[endif]-->装载数据库阶段(MOUNTED)
<!--[if !supportLists]-->1.<!--[endif]-->打开的文件:控制文件
//连接到ORACLE数据库
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 1 10:58:47 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
//查看当前数据库的状态
SQL> select status from v$instance;
STATUS
------------
STARTED
//尝试备份控制文件
SQL> alter database backup controlfile to '/disk3/orcl/backup/control.bak';
alter database backup controlfile to '/disk3/orcl/backup/control.bak'
*
ERROR at line 1:
ORA-01507: database not mounted
//将数据库置为mount状态
SQL> alter database mount;
Database altered.
//再次备份控制文件
SQL> alter database backup controlfile to '/disk3/orcl/backup/control.bak';
Database altered.
NOMOUNT状态下无法备份控制文件,MOUNT状态下备份成功,说明数据库从NOMOUNT到MOUNT状态读取了控制文件。
装载数据库阶段,系统会按照初始化参数文件中control_files参数的设置查找并打开控制文件。
Oracle是通过控制文件在实例和数据库之间建立关联的,通过控制文件可以取得数据文件和重做日志的名称和所处状态。但对数据文件和日志文件是否存在不作检查。
<!--[if !supportLists]-->(三)、<!--[endif]-->打开数据库状态(OPEN)
<!--[if !supportLists]-->1.<!--[endif]-->打开的文件
<!--[if !supportLists]-->1) <!--[endif]--> 数据文件
//数据库为MOUNT状态
SQL> select status from v$instance;
//尝试查询数据
SQL> select count(*)from scott.emp;
select * from scott.emp
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
//打开数据库
SQL> alter database open;
Database altered.
//再次尝试查询数据
SQL> select count(*) from scott.emp;
COUNT(*)
----------
14
在MOUNT状态下,我们无法读取到数据,说明数据文件没有被读取。当数据库OPEN后,我们可以读取到数据,说明数据库从MOUNT到OPEN加载了数据文件。
<!--[if !supportLists]-->2) <!--[endif]--> 联机重做日志文件
//数据库为MOUNT状态
SQL> select status from v$instance;
//尝试手工切换日志文件组
SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-01109: database not open
//将数据库置为OPEN状态
SQL> alter database open;
Database altered.
//再次尝试手工切换日志文件组
SQL> alter system switch logfile;
System altered.
在MOUNT状态下,我们无法手工切换日志文件组,说明联机重做日志文件没有被读取。当数据库OPEN后,可以切换,说明数据库从MOUNT到OPEN加载了日志文件。
<!--EndFragment-->来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29781254/viewspace-1744959/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29781254/viewspace-1744959/