mount阶段
mount阶段是启动的第二个阶段。此处,我们说mount的是什么?mount的是数据文件和控制文件,同时对应的日志文件信息也已经获取到。mount阶段下,所有的系统参数已经加载完成,通过参数找到的控制文件帮助实例定位加载了数据文件。同时,针对上次关闭系统中的问题,比如未完成事务和恢复等,都要进行处理。
//进入mount状态
SQL> alter database mount;
Database altered.
此时,监听器状态,从block变为了ready。
[oracle@oracle11g ~]$ lsnrctl status;
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-JAN-2011 15:59:22
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 22-JAN-2011 15:46:51
Uptime 0 days 0 hr. 12 min. 31 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/oracle/network/admin/listener.ora
Listener Log File /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))
Services Summary...
Service "wilson" has 1 instance(s).
Instance "wilson", status READY, has 1 handler(s) for this service...
The command completed successfully
此时的sqlplus命令提示符下,我们可以看到查询项目。
SQL> select count(*) from v$datafile;
COUNT(*)
----------
7
SQL> select count(*) from v$controlfile;
COUNT(*)
----------
2
SQL> select count(*) from v$logfile;
COUNT(*)
----------
6
SQL> select count(*) from dba_objects;
select count(*) from dba_objects
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
2 UNDOTBS1 YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 PERFSTAT YES NO YES
8 PERFSTATTEMP NO NO YES
9 MYTEST YES NO YES
9 rows selected.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 78
Current log sequence 80
上面的结果,可以看出。在mount状态下,一些基础视图已经可以查询,比如从控制文件中指定的对象信息,如表空间、日志等内容。但是涉及到对象数据类型的数据,还是不支持。说明,虽然将数据文件mount上了,但是并没有读取数据文件信息的操作。
此时,笔者在实验中发现了一个差异。在mount状态下,如果使用sqlplus查找参数,大部分参数是可以查询到的。但是转移到pl/sql developer开发工具上,大部分就会以报错结束。如:
--sqlplus
SQL> show parameter tablespace;
NAME TYPE VALUE
------------------------------------ ----------- ----------
undo_tablespace string UNDOTBS1
SQL>
--pl/sql developer
SQL> show parameter tablespace;
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
笔者猜想:从一些开发工具的角度,可能对于这种维护模式下的查询还是有限制的。
相对于nomount阶段,mount阶段是比较常用的。我们在这个阶段可以在不受到干扰的情况下进行数据库备份和还原工作。
打开数据库
该操作就是直接将数据文件的读取开启了。
SQL> alter database open;
Database altered.
此时监听器状态:
[oracle@oracle11g ~]$ lsnrctl status;
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-JAN-2011 16:04:21
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 22-JAN-2011 15:46:51
Uptime 0 days 0 hr. 17 min. 29 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/oracle/network/admin/listener.ora
Listener Log File /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))
Services Summary...
Service "wilson" has 1 instance(s).
Instance "wilson", status READY, has 1 handler(s) for this service...
Service "wilsonXDB" has 1 instance(s).
Instance "wilson", status READY, has 1 handler(s) for this service...
The command completed successfully
注意:和刚才的监听器程序相比,多出了一个<sid>XDB服务。这是Oracle提供的XMLDB服务的名称。默认情况下,XDB服务一同启动,一般都需要将他关闭掉。
说道XDB服务,有一个问题需要注意到。这个服务关联的系统参数是
dispatchers='(PROTOCOL=TCP) (SERVICE=XDB)'
熟悉共享模式的朋友们就会意识到,dispatchers参数不是共享模式的设置吗?没错,在全局是专用模式支持连接的情况下,默认的XDB是使用共享模式的。我们在启动的进程列表中,也可以看到对应的d00和s00/s01进程。
[oracle@oracle11g ~]$ ps -ef | grep oracle
root 5529 5497 0 15:39 pts/0 00:00:00 su oracle
oracle 5530 5529 0 15:39 pts/0 00:00:00 bash
oracle 5559 1 0 15:46 ? 00:00:00 /u01/oracle/bin/tnslsnr LISTENER -inherit
oracle 5565 5530 0 15:49 pts/0 00:00:00 sqlplus
(篇幅原因,略)
oracle 5645 1 0 15:50 ? 00:00:00 ora_mmnl_wilson
oracle 5647 1 0 15:50 ? 00:00:00 ora_d000_wilson //1
oracle 5649 1 0 15:50 ? 00:00:00 ora_s000_wilson //2
oracle 5651 1 0 15:50 ? 00:00:00 ora_s001_wilson //3
oracle 5653 5565 0 15:50 ? 00:00:03 oraclewilson (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) //4
root 5712 5680 0 15:53 pts/1 00:00:00 su oracle
(篇幅原因,略)
oracle 5796 5713 0 16:05 pts/1 00:00:00 grep oracle
其中,//4为对应的专用连接模式。//1、//2、//3为对应XDB的共享模式。也可以看出,在Oracle中,共享连接和专用连接在一定程度上是可以并存在一个实例下的。
此时,所有的数据信息已经开始支持访问。
SQL> select count(*) from dba_objects;
COUNT(*)
----------
72516
同时,一些视图的结构也发生变化,更多的信息被加载。
SQL> select * from v$tablespace;
TS# NAME INCLUDED_IN_DATABASE_BACKUP BIGFILE FLASHBACK_ON ENCRYPT_IN_BACKUP
---------- ------------------------------ --------------------------- -------
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
2 UNDOTBS1 YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 PERFSTAT YES NO YES
8 PERFSTATTEMP NO NO YES
9 MYTEST YES NO YES
9 rows selected
结论:Oracle的启动阶段每个阶段都有相应的特点和功能。理解这些对于我们了解体系结构有很大帮助。同时,当我们启动遇到故障的时候,是可以分阶段启动进行调整调错。