關於在spfile檔案上修改control_files引數的問題

litterbaby發表於2007-05-09
關於在spfile檔案上修改control_files引數的問題[@more@]

我在為控制檔案修改路徑的時候遇見一個這樣的問題。

本來三個控制檔案的位置是:

E:ORACLEORADATAORA10CONTROL01.CTL,

E:ORACLEORADATAORA10CONTROL02.CTL,

E:ORACLEORADATAORA10CONTROL03.CTL'

我現在將控制檔案的路徑修改為:

E:CONTROL01.CTL,

E:ORACLEORADATAORA10CONTROL02.CTL,

E:ORACLEORADATAORA10CONTROL03.CTL'

我開始做的時候是這樣的

SQL> alter system set control_files='E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL' scope=spfile;

系統已更改。

修改spfile檔案中的control_files引數,然後重啟資料塊。問題出現了。

SQL> startup mount

ORACLE 例程已經啟動。

Total System Global Area 159383552 bytes

Fixed Size 1247876 bytes

Variable Size 79693180 bytes

Database Buffers 75497472 bytes

Redo Buffers 2945024 bytes

ORA-00205: ?????????, ??????, ???????

alert檔案的錯誤是:

ALTER DATABASE MOUNT

Wed May 09 08:07:44 2007

ORA-00202: control file: 'E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL'

ORA-27041: unable to open file

OSD-04002: 無法開啟檔案

O/S-Error: (OS 123) 檔名、目錄名或卷標語法不正確。

無法找到控制檔案,這時候,我的控制檔案已經在自己的目錄上。spfile不行,我就使用pfile檔案。

SQL> create pfile from spfile;

檔案已建立。

看看pfile檔案中的control_files的內容:

*.control_files=’E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL’

正確的,啟動資料庫:

SQL> shutdown immediate

ORA-01109: 資料庫未開啟

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup mount pfile=e:oracleora10databaseinitora10.ora

ORACLE 例程已經啟動。

Total System Global Area 159383552 bytes

Fixed Size 1247876 bytes

Variable Size 79693180 bytes

Database Buffers 75497472 bytes

Redo Buffers 2945024 bytes

ORA-00205: ?????????, ??????, ???????

還是有問題。

檢視一下Oracle的文件,文件上說:

To Multiplex or Move Additional Copies of the Current Control Files

1) Shut down the database.

2) Copy an existing control file to a different location, using operating system commands.

3) Edit the CONTROL_FILES parameter in the database's initialization parameter file to add the new control file's name, or to change the existing control filename.

4) Restart the database.

文件上說是修改修改引數檔案中的CONTROL_FILES引數,我就是這樣做的啊?問題出在哪裡啊?很是鬱悶。後來看到文件上有這樣的格式。

CONTROL_FILES = (/u01/oracle/prod/control01.ctl,

/u02/oracle/prod/control02.ctl,

/u03/oracle/prod/control03.ctl)

我抱著試試看的態度,將pfile檔案上的control_files修改為:

*.control_files=(E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL)

重新啟動一下:更鬱悶的事情發生了,資料庫居然起來了。

SQL> startup mount pfile=e:oracleora10databaseinitora10.ora

ORACLE 例程已經啟動。

Total System Global Area 159383552 bytes

Fixed Size 1247876 bytes

Variable Size 79693180 bytes

Database Buffers 75497472 bytes

Redo Buffers 2945024 bytes

資料庫裝載完畢。

SQL>

SQL> show parameter control

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time integer 7

control_files string E:CONTROL01.CTL, E:ORACLEOR

ADATAORA10CONTROL02.CTL, E:

ORACLEORADATAORA10CONTROL03

.CTL

SQL>

那麼從pfile生成spfile看看:

SQL> create spfile from pfile;

檔案已建立。

SQL> shutdown immediate

ORA-01109: 資料庫未開啟

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup mount

ORACLE 例程已經啟動。

Total System Global Area 159383552 bytes

Fixed Size 1247876 bytes

Variable Size 79693180 bytes

Database Buffers 75497472 bytes

Redo Buffers 2945024 bytes

資料庫裝載完畢。

SQL>

鬱悶,居然沒有問題。

總結一下:

為了更改控制檔案的目錄,使用alter system修改引數control_filesspfile中。然後將spfile生成pfile檔案,關閉資料庫,這時候無論使用spfile還是pfile都無法啟動資料庫,錯誤是指定的控制檔案的路徑不正確。這時候pfile檔案的寫法是:

*.control_files=’E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL’

修改這個引數的寫法:

*.control_files=(E:CONTROL01.CTL, E:ORACLEORADATAORA10CONTROL02.CTL, E:ORACLEORADATAORA10CONTROL03.CTL)

這樣就沒有問題了。

問題出來了,我這個引數使用的是oracle的命令修改的spfile檔案,而且使用的是oracle命令生成的pfile檔案。為什麼oracle自己生成的東西會有問題那?還需要手工修改他的格式?

在深入一下:

我將正常執行的資料庫的引數檔案spfile生成為pfile。這時候pfile檔案中的control_files引數的格式還是為:

*.control_files='E:ORACLEORADATAORA10CONTROL01.CTL','E:ORACLEORADATAORA10CONTROL02.CTL','E:ORACLEORADATAORA10CONTROL03.CTL'

但是這時候,使用這個檔案還是能夠正常啟動:

SQL> shutdown immediate

ORA-01109: 資料庫未開啟

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup mount pfile=e:oracleora10databaseinitora10.ora

ORACLE 例程已經啟動。

Total System Global Area 159383552 bytes

Fixed Size 1247876 bytes

Variable Size 79693180 bytes

Database Buffers 75497472 bytes

Redo Buffers 2945024 bytes

資料庫裝載完畢。

SQL>

大家說說這是為什麼,難道我有什麼做錯的地方嗎?

我的資料庫版本是:

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

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

相關文章