1. 程式人生 > >Windows下用命令開啟資料庫

Windows下用命令開啟資料庫

在Windows上要把Oracle啟動到nomount狀態,於是在沒用啟動oracle服務的情況之下,輸入下述命令:

  1. C:\>sqlplus /nolog  
  2. SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 10月 14 16:28:13 2011  
  3. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  4. SQL> connect / as sysdba  
  5. ERROR:  
  6. ORA-12560: TNS: 協議介面卡錯誤  
  7. SQL>   

於是啟動監聽服務(命令: lsnrctl start   也可以啟動服務,而且能顯示監聽器監聽的 IP地址 和 Port 埠號):

      net    start    oracleoradb10g_home1tnslistener

      或者

       lsnrctl start 

監聽服務啟動成功。但是發現在sqlplus裡再次輸入connect命令時,還是出現同樣的錯誤。

在網路上找了一下,發現很多人也碰到了這個問題,如果你也碰到了類似的問題,下面的方法可以試一下:

1、在Windows下,當我們啟動資料庫服務時,資料庫會自動到Open狀態。現在要啟動到nomount狀態,必需修改登錄檔,把鍵值:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1下ORA_ORCL_AUTOSTART值修改為 FALSE,修改之後就不會自動啟動到Open狀態了,這樣就有機會啟動到nomount狀態了。

2. 如果遇見下面這種情況:

首先我們要以管理員身份開啟命令:Windows+X+A 直接開啟【命令提示符(管理員)】,然後在輸入相應的命令就可以了

下面首先會啟動服務,然後再連線。

  1. C:\>net start OracleServiceOrcl  
  2. OracleServiceORCL 服務正在啟動 .  
  3. OracleServiceORCL 服務已經啟動成功。  
  4. C:\>sqlplus /nolog  
  5. SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 10月 14 17:08:14 2011  
  6. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  7. SQL> connect / as sysdba  
  8. 已連線到空閒例程。  
  9. SQL> startup nomount  
  10. ORACLE 例程已經啟動。  
  11. Total System Global Area  603979776 bytes  
  12. Fixed Size                  1250380 bytes  
  13. Variable Size             213912500 bytes  
  14. Database Buffers          381681664 bytes  
  15. Redo Buffers                7135232 bytes  
  16. SQL>  

那麼接下去可以修改資料庫到mount,open狀態。

  1. SQL> alter database mount  
  2. 資料庫已更改。  
  3. SQL> alter database open;  
  4. 資料庫已更改。  
  5. SQL>  

2、直接啟動資料庫的服務,然後連線資料庫,shutdown,然後再啟動到nomount狀態。

     為什麼要這麼做呢? 主要是還是上面說的,如果不修改oracle在登錄檔裡的啟動引數的話,一旦啟動服務,那麼資料庫就處於open狀態,也就不可能在轉到nomount狀態了。

    所以反其道而行之,這個時候資料庫已關閉、資料庫已解除安裝、例項已關閉,同時服務還是啟動的,也就是說在工作管理員裡oracle.exe程序還在,同時發現oracle佔的記憶體很少,因為此時已經釋放了SGA系統全域性區的記憶體了。

  1. C:\>sqlplus /nolog  
  2. SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 10月 14 17:24:59 2011  
  3. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  4. SQL> connect / as sysdba  
  5. 已連線到空閒例程。  
  6. SQL> startup nomount  
  7. ORACLE 例程已經啟動。  
  8. Total System Global Area  603979776 bytes  
  9. Fixed Size                  1250380 bytes  
  10. Variable Size             218106804 bytes  
  11. Database Buffers          377487360 bytes  
  12. Redo Buffers                7135232 bytes  
  13. SQL>  
  14. SQL> alter database mount  
  15.   2  ;  
  16. 資料庫已更改。  
  17. SQL> alter database open;  
  18. 資料庫已更改。  
  19. SQL>  

另外,當關閉資料庫,又重新啟動到open狀態時,下面顯示了關閉資料庫的順序(資料庫已經關閉、已經解除安裝資料庫、ORACLE 例程已經關閉)、啟動的順序(ORACLE 例程已經啟動、資料庫裝載完畢、資料庫已經開啟)。

  1. SQL> shutdown immediate;  
  2. 資料庫已經關閉。  
  3. 已經解除安裝資料庫。  
  4. ORACLE 例程已經關閉。  
  5. SQL> startup open;  
  6. ORACLE 例程已經啟動。  
  7. Total System Global Area  603979776 bytes  
  8. Fixed Size                  1250380 bytes  
  9. Variable Size             218106804 bytes  
  10. Database Buffers          377487360 bytes  
  11. Redo Buffers                7135232 bytes  
  12. 資料庫裝載完畢。  
  13. 資料庫已經開啟。  
  14. SQL>  

還有,如果直接啟動到nomount狀態,那麼就不能再啟動到mount狀態(除非先shutdown),只能通過alter database mount語句,修改資料庫的狀態為mount,同理對open狀態也是一樣的,也就是說只能是:

第一種 :

     startup nomount;

     alter database mount;

     alter database open;

第二種:

    startup nomount;

    alter database open;

第三種:

    startup open;

像下面這樣:

   startup nomount;

   startup mount;                            會導致ora_01081錯誤

下面給出了已經排好順序的啟動和停止服務的兩個批處理檔案:

Start Oracle 11g Service.bat

@echo off

echo 確定要啟動Oracle 11g服務嗎?

pause

net start OracleOraDb11g_home1TNSListener

net start OracleServiceORCL

net start OracleDBConsoleorcl

echo 啟動Oracle 11g服務完成,請確認有沒有錯誤發生。

Pause

Stop Oracle 11g Service.bat

@echo off

echo 確定要停止Oracle 11g服務嗎?

pause

net stop OracleDBConsoleorcl

net stop OracleServiceORCL

net stop OracleOraDb11g_home1TNSListener

echo 停止Oracle 11g服務完成,請確認有沒有錯誤發生。

Pause