这个问题其实是来自论坛上的一个帖子:http://www.itpub.net/showthread.php?s=&threadid=658187。
帖子中的问题和文章的标题十分接近,其实不光是问题解决,答案也十分接近,造成这两种特殊情况成立的原因是同一个——只读表空间。
在上面的帖子中,我提到了,可以利用备份和恢复的方式,将一个只读表空间在两个数据库同时加载。这篇文章尝试实现上述的目的:
首先设置USERS表空间为只读表空间,然后对数据库进行热备份。USERS表空间为只读表空间,在备份的时候跳过了USERS表空间。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> ALTER TABLESPACE USERS READ ONLY;
表空间已更改。
SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' BEGIN BACKUP;'
2 FROM DBA_TABLESPACES
3 WHERE CONTENTS != 'TEMPORARY'
4 AND TABLESPACE_NAME != 'USERS';
'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'
-------------------------------------------------------------
ALTER TABLESPACE SYSTEM BEGIN BACKUP;
ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;
ALTER TABLESPACE INDX BEGIN BACKUP;
ALTER TABLESPACE TOOLS BEGIN BACKUP;
ALTER TABLESPACE YANGTK BEGIN BACKUP;
SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE INDX BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE TOOLS BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE YANGTK BEGIN BACKUP;
表空间已更改。
SQL> SELECT 'HOST COPY ' || FILE_NAME || ' F:ORACLEBACKUPTEST20061112'
2 FROM
3 (
4 SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME != 'USERS'
5 UNION ALL
6 SELECT FILE_NAME FROM DBA_TEMP_FILES
7 );
'HOSTCOPY'||FILE_NAME||'F:ORACLEBACKUPTEST20061112'
-----------------------------------------------------------------------------
HOST COPY F:ORACLEORADATATESTYANGTK01.DBF F:ORACLEBACKUPTEST20061112
HOST COPY F:ORACLEORADATATESTTOOLS01.DBF F:ORACLEBACKUPTEST20061112
HOST COPY F:ORACLEORADATATESTINDX01.DBF F:ORACLEBACKUPTEST20061112
HOST COPY F:ORACLEORADATATESTUNDOTBS01.DBF F:ORACLEBACKUPTEST20061112
HOST COPY F:ORACLEORADATATESTSYSTEM01.DBF F:ORACLEBACKUPTEST20061112
HOST COPY F:ORACLEORADATATESTTEMP01.DBF F:ORACLEBACKUPTEST20061112
已选择6行。
IXDBA.NET技术社区SQL> HOST COPY F:ORACLEORADATATESTYANGTK01.DBF F:ORACLEBACKUPTEST20061112
SQL> HOST COPY F:ORACLEORADATATESTTOOLS01.DBF F:ORACLEBACKUPTEST20061112
SQL> HOST COPY F:ORACLEORADATATESTINDX01.DBF F:ORACLEBACKUPTEST20061112
SQL> HOST COPY F:ORACLEORADATATESTUNDOTBS01.DBF F:ORACLEBACKUPTEST20061112
SQL> HOST COPY F:ORACLEORADATATESTSYSTEM01.DBF F:ORACLEBACKUPTEST20061112
SQL> HOST COPY F:ORACLEORADATATESTTEMP01.DBF F:ORACLEBACKUPTEST20061112
SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' END BACKUP;'
2 FROM DBA_TABLESPACES
3 WHERE CONTENTS != 'TEMPORARY'
4 AND TABLESPACE_NAME != 'USERS';
'ALTERTABLESPACE'||TABLESPACE_NAME||'ENDBACKUP;'
-----------------------------------------------------------
ALTER TABLESPACE SYSTEM END BACKUP;
ALTER TABLESPACE UNDOTBS1 END BACKUP;
ALTER TABLESPACE INDX END BACKUP;
ALTER TABLESPACE TOOLS END BACKUP;
ALTER TABLESPACE YANGTK END BACKUP;
SQL> ALTER TABLESPACE SYSTEM END BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE UNDOTBS1 END BACKUP;