【DUAL】資料庫nomount狀態下DUAL的內容

secooler發表於2009-10-24
從資料庫在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 --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-617354/,如需轉載,請註明出處,否則將追究法律責任。

相關文章