Oracle数据库的启动和关闭II

<!--[if !supportLists]--&gt一、<!--[endif]--&gt实例的启动与关闭

<!--[if !supportLists]--&gt(一)、<!--[endif]--&gt启动实例阶段STARTED

<!--[if !supportLists]--&gt1.<!--[endif]--&gt打开的文件

<!--[if !supportLists]--&gt1) <!--[endif]--&gt 警告日志文件

 

//启动实例前执行,查看进程是否打开

[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]--&gt1) <!--[endif]--&gt 初始化参数文件

前面已经介绍过,初始化参数分为两种。静态初始化参数文件和动态初始化参数文件。

静态初始化参数文件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]--&gt2.<!--[endif]--&gt步骤

  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

如果三个文件都不存在,则报错。


 

rIh2k54DAABgQTgAAAAWhAMAAGBBOAAAABaEAwAAYEE4AAAAFoQDAABgQTgAAAAWhAMAAGBBOAAAABYVMQ2kR4ZGXwQAUGYqot2k5wAAAFgQDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQOX4f1OnXr9x+rpmAAAAAElFTkSuQmCC

1-2 实例的启动

 

<!--[if !supportLists]--&gt




3.<!--[endif]--&gt可执行的相关操作

<!--[if !supportLists]--&gt● <!--[endif]--&gt创建数据库

<!--[if !supportLists]--&gt● <!--[endif]--&gt创建控制文件

Question:为什么创建控制文件和创建数据库都需要在nomount状态下?

Tips:想不明白的话,就在后面的章节中找答案吧!

 

<!--[if !supportLists]--&gt(二)、<!--[endif]--&gt装载数据库阶段(MOUNTED

<!--[if !supportLists]--&gt1.<!--[endif]--&gt打开的文件:控制文件

 

//连接到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状态下备份成功,说明数据库从NOMOUNTMOUNT状态读取了控制文件。

装载数据库阶段,系统会按照初始化参数文件中control_files参数的设置查找并打开控制文件。

Oracle是通过控制文件在实例和数据库之间建立关联的,通过控制文件可以取得数据文件和重做日志的名称和所处状态。但对数据文件和日志文件是否存在不作检查。


<!--[if !supportLists]--&gt(三)、<!--[endif]--&gt打开数据库状态(OPEN

<!--[if !supportLists]--&gt1.<!--[endif]--&gt打开的文件

<!--[if !supportLists]--&gt1) <!--[endif]--&gt 数据文件

 

//数据库为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后,我们可以读取到数据,说明数据库从MOUNTOPEN加载了数据文件。

<!--[if !supportLists]--&gt2) <!--[endif]--&gt 联机重做日志文件

 

//数据库为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后,可以切换,说明数据库从MOUNTOPEN加载了日志文件。

<!--EndFragment--&gt

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29781254/viewspace-1744959/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29781254/viewspace-1744959/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值