从数据库在nomount状态下dual可查询谈起。
1.关闭数据库
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
2.启动数据库到nomount状态
sys@ora10g> startup nomount;
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2074152 bytes
Variable Size 637536728 bytes
Database Buffers 1493172224 bytes
Redo Buffers 14700544 bytes
3.查看一下dual的内容
结论:首先是可以查询这个dual,然后就是显示的结果和正常加载数据库后的效果是不一样的。多出来的ADDR、INDX和INST_ID三列做什么用的呢?
sys@ora10g> select * from dual;
ADDR INDX INST_ID DUM
---------------- ---------- ---------- ---
00000000056B1C5C 0 1 X
进一步,可以利用这个dual进行辅助查询,如查询当前的时间
sys@ora10g> select sysdate from dual;
SYSDATE
-------------------
2009-10-24 16:41:57
4.open数据库后的查看dual的亲切效果如下
sys@ora10g> alter database mount;
Database altered.
sys@ora10g> alter database open;
Database altered.
sys@ora10g> select * from dual;
D
-
X
5.到底为什么在nomount没有加载数据库的情况下可以进行查询呢(比如上面有关dual的查询)?
原因很简单,因为在nomount状态下也是有大量的数据库维护工作可以做的,比如备份恢复工具RMAN在nomount下的一些维护工作,RMAN要获得实例的一些信息,所以一定要通过某种途径获得。这就是为什么只在启动数据库实例,没有加载数据库的情况下也可以完成某些查询的原因。
6.在nomount下还可以查询一些视图,这些都是在nomount下辅助功能的一部分
sys@ora10g> select count(*) from v$instance;
COUNT(*)
----------
1
sys@ora10g> select * from v$version;
BANNER
----------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
sys@ora10g> select count(*) from v$spparameter;
COUNT(*)
----------
260
sys@ora10g> select * from v$sga;
NAME VALUE
------------------------------ ----------
Fixed Size 2074152
Variable Size 637536728
Database Buffers 1493172224
Redo Buffers 14700544
sys@ora10g> select count(*) from v$bh;
COUNT(*)
----------
0
7.小结
通过这个小实验,只是想给大家展示一下在没有打开数据库,甚至没有加载数据库,仅仅在启动实例的阶段,也是可以进行某些查询的。思路要开阔一些。
-- The End --