備份與恢復--一個表空間能否被多個資料庫讀寫?

jolly10發表於2009-01-22
繼續上一篇文章的測試,第一個資料庫採用只讀方式開啟USERS表空間,然後在目標資料庫透過重建資料庫恢復的方式載入這個表空間,載入成功後,下面嘗試在源資料庫中將表空間以讀寫方式開啟。[@more@]

SQL> SELECT NAME FROM V$DATABASE;

NAME
---------
ORCL


SQL> alter tablespace users read write;
alter tablespace users read write
*
ERROR at line 1:
ORA-01256: error in locking database file 4
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

再看看目標庫的情況

SQL> SELECT NAME FROM V$DATABASE;

NAME
---------
JOLLY

SQL> alter tablespace users read write;

Tablespace altered.
SQL> select owner,table_name from all_tables where tablespace_name='TEST';

OWNER TABLE_NAME
------------------------------ ------------------------------
JGLU TEST1

SQL> insert into jglu.test1 select * from dba_objects where rownum<100;

99 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from jglu.test1;

COUNT(*)
----------
298

在目標資料庫可以將表空間置為讀寫狀態,而且可以順利的寫入資料。

在源庫是否能看到目標庫的修改資料?答案是不能

ORCL set sqlp 'ORCL>'
ORCL> select count(*) from jglu.test1;

COUNT(*)
----------
199

對於只讀的表空間,Oracle肯定認為資料沒有發生改變,現在得到的結果應該是從記憶體的CACHE返回的。嘗

試將表空間置為OFFLINE,在置於ONLINE狀態,使得記憶體中的CACHE過期,但是操作發現報錯:


ORCL>alter tablespace users offline;

Tablespace altered.

ORCL>alter tablespace users online;
alter tablespace users online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'


看來目標資料庫的獨佔鎖導致了這個問題,那麼先在目標資料庫中將表空間置回只讀狀態:

SQL> set sqlp 'JOLLY>'
JOLLY>alter tablespace users read only;

Tablespace altered.

在源庫再來online

ORCL>alter tablespace users online;
alter tablespace users online
*
ERROR at line 1:
ORA-01190: control file or data file 4 is from before the last RESETLOGS
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

嘗試recover,但是失敗

ORCL>recover tablespace users;
ORA-00283: recovery session canceled due to errors
ORA-19909: datafile 4 belongs to an orphan incarnation
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

嘗試重建控制檔案也無法恢復此表空間,因為此表空間的資料檔案被兩個資料庫同時開啟,而且目標資料庫可以使用讀寫方式開啟,但是這個資料檔案對於源資料庫來說已經發生了改變,在恢復時找到她原始的incarnation,一旦資料庫重新載入這個檔案就會出現異常。

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

相關文章