錯誤狀態:
SQL> startup
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux Error: 2: No such file or directory
SQL> show parameter db_recovery_file_dest
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0
解決思路:
是指定的目錄不存在?還是沒權限?照網上的方法創建文件夾還是不行。
最后根據原理發現數據庫啟動是由spfile,pfile等決定的,檢查相關文件內容
由於啟動方式是以spfile決定的,檢查spfile定義的文件夾是否都創建了,有權限了。
錯誤原因:
最后在spfileorcl.ora文件里查看,發現其中一個文件夾在該指定目錄不存在,
db_recovery_file_dest的文件件夾丟失,文件夾不存在。
解決辦法:
在該目錄下(/home/oracle/app/oradata) 創建對應的文件或文件夾
重新啟動 startup,啟動成功!
相關知識點:
oracle數據庫啟動和停止
以oracle用戶身份登錄
登錄后輸入以下命令:
oracle-> sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 4月 26 09:42:00 2004
Copyright (c) 1982, 2002>>, Oracle Corporation. All rights reserved.
SQL>; connect /as sysdba
已連接。
SQL>;
在進入后就可以進行下面的操作了!
先說關閉數據庫
shutdown有四個參數,四個參數的含義如下:
Normal 需要等待所有的用戶斷開連接
Immediate 等待用戶完成當前的語句
Transactional 等待用戶完成當前的事務
Abort 不做任何等待,直接關閉數據庫
normal需要在所有連接用戶斷開后才執行關閉數據庫任務,所以有的時候看起來好象命令沒有運行一樣!在執行這個命令后不允許新的連接
immediate在用戶執行完正在執行的語句后就斷開用戶連接,並不允許新用戶連接。
transactional 在擁護執行完當前事物后斷開連接,並不允許新的用戶連接數據庫。
abort 執行強行斷開連接並直接關閉數據庫。
前三種方式不回丟失用戶數據。第四種在不的已的情況下,不建議采用!
數據庫的啟動
數據庫啟動使用startup命令,它有三種情況
第一種:不帶參數,啟動數據庫實例並打開數據庫,以便用戶使用數據庫,在多數情況下,使用這種方式!
第二種:帶nomount參數,只啟動數據庫實例,但不打開數據庫,在你希望創建一個新的數據庫時使用,或者在你需要這樣的時候使用!
第三種:帶mount參數,在進行數據庫更名的時候采用。這個時候數據庫就打開並可以使用了!
lsnrctl start 啟動監聽器
pfile, spfile,參數文件,服務器參數文件
1、 PFILE和SPFILE定義
PFILE:文本參數文件(TEXT PARAMETER FILE)又叫靜態參數文件,ASCII文本文件(可以直接編輯)
SPFILE:服務器參數文件(SERVER PARAMETER FILE)。二進制文件(不可以直接編輯,db啟動后通過sql命令在線修改。)
Oracle啟動過程中選擇參數文件的順序:
從Oracle9i開始,spfile被引入Oracle數據庫,Oracle首選spfile<ORACLE_SID>.ora文件作為啟動參數文件;如果該文件不存在,Oracle選擇spfile.ora文件;如果前兩者都不存在,Oracle將會選擇init<ORACLE_SID>.ora文件;如果以上三個文件都不存在,Oracle將無法創建和啟動instance。
Oracle在啟動過程中,會在特定的路徑中尋找參數文件,在Unix/Linux下的路徑為$ORACLE_HOME/dbs目錄,在WINDOWS上的路徑為$ORACLE_HOME/database目錄。
關於參數文件的詳細說明:
新建一個數據庫以后,默認啟動文件是/dbs目錄下的spfile,,執行create pfile from spfile以后,重啟數據庫,執行show parameter spfile會顯示value為空,說明這時不是以spfile啟動的,這時執行create pfile from spfile,會出現錯誤,因為現在沒有使用spfile,這里用命令create spfile frompfile ,再重啟數據庫,發現啟動參數為spfile。在剛安裝完oracle以后,spfile和pfile會出 現在/dbs目錄下,這時啟動參數為spfile,執行create pfiel from spfile 以后,會在/database目錄下產生一個pfile,這時重啟數據庫,會以/database目錄下的pfile啟動,重啟后,執行create spfile from pfile,會在/database下產生一個spfile文件,這時重啟數據庫會以/database目錄下的spfile啟動。也就是說oracle會先找/database目錄下的spfile和pfile,再找/dbs目錄下的spfile和pfile。
2、 存放位置,查詢v$parameter視圖,方式有兩種。
1)SQL> select vp.VALUE from v$parameter vp where vp.NAME = 'spfile';
VALUE
--------------------------------------------------------------------------------
F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA
2)SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA
實際上,以上兩種方式是一樣的。方式2)是方式1)的封裝語句,從告警文件中可以發現,show parameter其實是執行了方式1)的語句。
一般保存位置:
Spfile位置:$/oracle/product/10.2.0/db_1/dbs/spfile<sid>.ora
對於Windows其位置是:$ORACLE_HOME/database/spfile<SID>.ora
pfile位置:$oracle/oracle/product/10.2.0/admin/<sid>/init.ora.xxxxx
在$ORACLE_BASE/admin/<sid>/pfile下,你很可能可以看到一個類似這樣init.ora.1 92003215317]名字的文件,這就是初始化參數文件,只是跟上了時間戳。對於Oracle920 ,缺省的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個文件創建而來 ,你可以去掉這個長后綴,就是標准的pfile文件了。
3、 判斷db系統以pfile還是spfile啟動?
1) 用show parameter spfile命令,如果Value為空,則表示使用以pfile啟動db,未創建spfile。
SQL> show parameter spfile;
SQL> select name, value from v$parameter where name = 'spfile';
--以下是變種方式:
SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM sys.v_$parameter WHERE name = 'spfile';
2) 查詢v$spparameter視圖。如果isspecified里有true,表明用spfile進行了指定配置。如果全為false,表明用pfile啟動。
SQL> Select isspecified, count(*) from v$spparameter group by isspecified;
ISSPECIFIED COUNT(*)
----------- ----------
TRUE 23
FALSE 236
3) 通過create pfile來鑒別,如果當前使用的不是spfile,則相應格式的create pfile會產生錯誤。
查看是否使用SPFILE,可以在數據庫啟動后,使用create spfile命令驗證。
SQL> create spfile from pfile='d:/asdf.ora';
create spfile from pfile='d:/asdf.ora'
*
ERROR 位於第 1 行:
ORA-32002: 無法創建已由例程使用的 SPFILE
4)
4、 Spfile與pfile相互創建
1) 從pfile創建spfile的方法。
如果以pfile啟動,想切換成spfile啟動。則重建spfile,然后重啟DB即可。
create spfile from pfile;
SQL> create spfile from pfile;
Done
SQL> create spfile from pfile='F:/oracle/product/10.2.0/admin/fftest/pfile/init.ora.215201120126';
Done
SQL> connect fftest/fftest@fftest
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/DATABASE/SPFILEFFTEST.ORA
2) 從spfile創建pfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile='?/dbs/init<sid>.ora'
對於pfile,你可以用文本編輯器直接手工編輯一個,也可以使用create pfile命令 從spfile創建,如:CREATE PFILE='C:/PFILE/MYPFILE.ORA' FROM SPFILE='D:/SPFILE/MYSPFILE.ORA',或者從當前實例所使用的spfile創建:create pfile='c:/pfile/mypfile.ora' from spfile。
3)
5、 參數文件的修改方法
1) 分為手動修改和在線修改。
Pfile:手動修改用於修改pfile,直接用文本編輯打開pfile修改。要使用修改生效,須重啟數據庫。
Spfile:在線修改是在數據庫運行時,用alter system命令進行修改,命令如下(詳細的命令 語句請參考oracle官方參考文檔):
sql>alter system set job_queue_processed=50 scope=MEMORY
注意,scope=MEMORY表示應用范圍,取值如下:
SPFILE:修改只對SPFILE有效,不影響當前實例,需要重啟數據庫才能生效;
MEMORY:修改只對內存有效,即只對當前實例有效,且立即生效,但不會保存到SPFILE, 數據庫重啟后此配置丟失;
BOTH:顧名思義,包含以上兩種,立即生效,且永久生效。
對於ALTER SYSTEM的參數修改命令,請注意以下幾點:
第一,如果當前實例使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯誤;
第二,如果實例以pfile啟動,則scope的默認值為MEMORY, 若以spfile啟動,則默認值為 BOTH;
第三,可以使用DEFERRED表示所作修改只適用於將來的會話,還可以使用COMMENT寫入注 釋,如:ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 注釋"
第四,刪除參數的方法如下:ALTER SYSTEM SET PARAMETER='';
附:啟動順序、pfile、spfile測試用例:
C:/Documents and Settings/felix>sqlplus fftest/fftest@fftest
連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown immediate;
ORA-01031: 權限不足
SQL> connect fftest/fftest@fftest as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> connect sys/fftest@fftest as sysdba;
已連接。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
SQL> alter database open;
數據庫已更改。
SQL> show parameter spfile; --此處表明使用的spfile啟動
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> create pfile from spfile; --spfile在OS級別改名后,創建pfile報錯
create pfile from spfile
*
第 1 行出現錯誤:
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 222301060 bytes
Database Buffers 381681664 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
SQL> alter database open;
數據庫已更改。
SQL> show parameter spfile; --因為database/下的spfile改名,又找不到spfile.ora,只能找到initfftest.ora,而里面內容為spfile ...重定位到dbs/spfile文件
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DBS/SPFILEFFTEST.ORA
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DBS/SPFILEFFTEST.ORA
SQL> create pfile from spfile; --把dbs/下的spfile也改名,創建pfile失敗。
create pfile from spfile
*
第 1 行出現錯誤:
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount; --因為spfile改名,導致db找不到啟動文件,不能啟動db,報錯
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'F:/oracle/product/10.2.0/db_3/dbs/spfileff
test.ora'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
SQL> startup mount;
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 176163716 bytes
Database Buffers 427819008 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
SQL> alter database open;
數據庫已更改。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> alter system set db_recovery_file_dest_size=10g scope=both; --spfile更改成功
系統已更改。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> create pfile from spfile; --用spfile生成pfile,可以看到pfile內容不再是spfile的重定向內容。
文件已創建。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter db_recovery_file_dest_size; --重啟db,依然為10g
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup pfile=f:/oracle/product/10.2.0/db_3/database/init.ora.215201120126 --用指定的pfile文件啟動
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter db_recovery_file_dest_size; --大小為2G
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile; ---用pfile生成spfile
文件已創建。
SQL> alter system set db_recovery_file_dest_size=3g scope=both; --pfile啟動改參數失敗
alter system set db_recovery_file_dest_size=3g scope=both
*
第 1 行出現錯誤:
ORA-32001: 已請求寫入 SPFILE, 但是在啟動時未指定 SPFILE
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter spfile; ---重啟db,默認還是找database下的spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup pfile=f:/oracle/product/10.2.0/db_3/database/init.ora.215201120126 --手動編輯pfile文件參數后
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 3G
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 184552324 bytes
Database Buffers 419430400 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL>
#測試end