ORA-01262,oracle啟動報錯,及Oracle啟動原理


錯誤狀態:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM