錯誤檔名稱下的Oracle選擇

realkid4發表於2014-05-15

 

建立表空間、檔案過程中,目錄是否存在和空間是否滿足是我們需要關注的問題。保持系統資料儲存策略一致性,避免出現大的返工動作是這個過程中必須考慮的問題。

很多時候,不謹慎的操作行為會帶來很大影響和問題。比如武斷信任系統部署文件,沒有切實的去做分析工作,都會給我們的系統帶來很多問題。但是,出現問題的一個積極作用是可以幫助我們瞭解更多的知識,理解系統特性和功能。

本篇介紹一個由於錯誤檔案建立而發現的Oracle特性。

 

1、問題簡述

 

在巡檢過程中,資料庫日誌中出現如下記錄:

 

 

Tue May 13 18:08:58 2014

create tablespace mssite

datafile 'D:\APP\XXX\ORADATA\ORCL\msite.DBF'

size 10240m

autoextend on next 10m maxsize 20480m

Tue May 13 18:09:56 2014

Completed: create tablespace mssite

datafile 'D:\APP\XXX\ORADATA\ORCL\mssite.DBF'

size 10240m

autoextend on next 10m maxsize 20480m

 

當前系統是10gR2,版本號為10.2.0.1。系統OMF特性啟動。

 

SQL> select * from v$version;

 

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

 

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

 

 

SQL> show parameter db_create

 

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string      /u01/app/oracle/oradata

db_create_online_log_dest_1          string     

 

Linux系統中,是怎麼建立的“C:\xx”目錄?重要的是,Oracle也正常執行語句,沒有進行報錯。此時,新檔名稱如下:

 

SQL> select file_name, tablespace_name from dba_data_files;

 

FILE_NAME                                                                        TABLESPACE_NAME

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

(篇幅原因,有省略……

/u01/app/oracle/oradata/DB/datafile/o1_mf_testtbl_9q1h2gq1_.dbf           TESTTBL

/u01/app/oracle/product/10.2.0/db_1/dbs/D:APPXXXORADATAORCLmssite.DBF           MSSITE

 

6 rows selected

 

dba_data_files檢視中,我們看到其他資料檔案都是遵守Oracle OMF特性,在db_file_create_dest目錄下進行檔案建立。指定的錯誤路徑檔案,被放置在$ORACLE_HOME/dbs目錄中,以路徑壓縮(去除\字元)的方式進行命名。

那麼,這個是否是Oracle的特性呢?我們透過實驗來進行證明。

 

2、測試實驗

 

我們選擇在11gR2上進行實驗,兩者在OMF方面差異不大。

 

SQL> show parameter db_create;

 

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string      /u01/app/oradata

db_create_online_log_dest_1          string     

db_create_online_log_dest_2          string      

 

建立錯誤目錄檔案表空間。

 

 

SQL> create tablespace test datafile 'd:\test.dbf' size 10m;

Tablespace created

 

SQL> select file_name, tablespace_name from dba_data_files;

 

FILE_NAME                                                                        TABLESPACE_NAME

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

(篇幅原因,有省略……

/u01/app/oracle/dbs/d:test.dbf                                                   TEST

/u01/app/oradata/ORA11G/datafile/o1_mf_system_9ppkjccb_.dbf                      SYSTEM

/u01/app/oradata/ORA11G/datafile/o1_mf_users_9pplqldd_.dbf                       USERS

 

7 rows selected

 

相同的現象出現,資料檔案建立在$ORACLE_HOME/dbs,檔名被設定為錯誤目錄結構壓縮版。相同檔案是否可以建立?

 

SQL> create tablespace test1 datafile 'd:\test.dbf' size 10m;

create tablespace test1 datafile 'd:\test.dbf' size 10m

 

ORA-01537: 無法新增檔案 'd:\test.dbf' - 該檔案已是資料庫的一部分

 

SQL> create tablespace test1 datafile 'd:\test1.dbf' size 10m;

Tablespace created

 

如果是OMF特性,要求在datafile中不寫入檔名稱資訊。所以,當前現象並不是OMF的結果。而且$ORACLE_HOME/dbs是一個非常古老的重要資料夾,密碼檔案、引數檔案都駐留於此,在備份過程中,這個目錄也經常充當控制檔案備份所在。

所以,這個現象應該是Oracle在非法檔名出現時候的一種應急反應。如果目錄結構是非法的,Oracle會設法將其轉化為符合單個檔案標準的檔名,存放在$ORACLE_HOME/dbs裡面。

我們刪除這些檔案的時候,OMF特性是不啟動的。所以需要手工刪除或者加入including子句。

 

 

SQL> drop tablespace test;

Tablespace dropped

 

SQL> drop tablespace test1 including contents and datafiles;

Tablespace dropped

 

[root@SimpleLinux dbs]# ls -l

total 19788

-rw-r-----. 1 oracle oinstall 10493952 May 14 11:15 d:test.dbf

-rw-rw----. 1 oracle oinstall     1544 May 14 08:45 hc_ora11g.dat

-rw-r--r--. 1 oracle oinstall     2851 May 15  2009 init.ora

-rw-r-----. 1 oracle oinstall       24 Apr  1 12:39 lkORA11G

-rw-r-----. 1 oracle oinstall     1536 Apr  3 09:07 orapwora11g

-rw-r-----. 1 oracle oinstall  9748480 May  9 10:46 snapcf_ora11g.f

-rw-r-----. 1 oracle oinstall     3584 May 14 11:14 spfileora11g.ora

 

3、結論

 

在這個過程中,我們發現了OracleOMF檔案建立過程中的規律。如果檔名稱非法,Oracle會將非法檔名(含目錄)處理為合法檔名稱,放在$ORACLE_HOME/dbs中。這個過程是不會報錯的。

但是,從管理角度看,我們是不推薦這種做法的。首先這個目錄是一個軟體級別公用的目錄,如果有多個例項資料庫,這個資料夾是比較危險的。另外,這種方式也不符合Oracle OFA要求的管理策略。

歸結到這個功能特性,筆者認為還是不要妄用為好。一個部署運維人員,確認檔案目錄這類基本的能力,還是必要的。


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

相關文章