yangtingkun
===========================================================
同一个表空间能否被多个数据库同时打开(三)
===========================================================

这个问题其实是来自论坛上的一个帖子:http://www.itpub.net/showthread.php?s=&threadid=658187

帖子中的问题和文章的标题十分接近,其实不光是问题解决,答案也十分接近,造成这两种特殊情况成立的原因是同一个——只读表空间。

两个数据库加载同一个数据文件后,能否被一个或两个数据库只读打开。

同一个表空间能否被多个数据库同时打开:http://yangtingkun.itpub.net/post/468/228632

同一个表空间能否被多个数据库同时打开(二):http://yangtingkun.itpub.net/post/468/474088


继续上一篇文章的测试,第一个数据库采用只读方式打开TESTTBS表空间,然后在目标数据库通过迁移表空间的方式加载这个表空间。

加载成功后,下面尝试在源数据库中将表空间以读写方式打开:

SQL> CONN YANGTK/YANGTK@YTK92已连接。
SQL> ALTER TABLESPACE TESTTBS READ WRITE;
ALTER TABLESPACE TESTTBS READ WRITE
*
1 行出现错误:
ORA-01256:
在锁定数据库文件 11 时出错

ORA-01110:
数据文件 11: 'E:ORACLEORADATAYTK92TESTTBS.DBF'

可以看到,源数据库修改读写状态报错,下面在目标数据库将表空间置为读写状态:

SQL> CONN YANGTK/YANGTK@YTK102已连接。
SQL> ALTER TABLESPACE TESTTBS READ WRITE;

表空间已更改。

SQL> INSERT INTO T_TESTTBS SELECT * FROM T_TESTTBS;

已创建20行。

SQL> COMMIT;

提交完成。

SQL> SELECT COUNT(*) FROM T_TESTTBS;

COUNT(*)
----------
40

在目标数据库可以将表空间置为读写状态,而且可以顺利的写入数据。

下面在源数据库检查可能看到修改,为了操作方便,新建一个会话进行查询:

SQL> SET SQLP 'SQL2> '
SQL2> SELECT COUNT(*) FROM T_TESTTBS;

COUNT(*)
----------
20

在源数据库中看不到修改,不过这个也不难理解,对于只读的表空间,Oracle肯定认为数据没有发生改变,现在得到的结果应该是从内存的CACHE返回的。尝试将表空间置为OFFLINE,在置于ONLINE状态,使得内存中的CACHE过期,但是操作发现报错:

SQL2> ALTER TABLESPACE TESTTBS OFFLINE;

表空间已更改。

SQL2> ALTER TABLESPACE TESTTBS ONLINE;
ALTER TABLESPACE TESTTBS ONLINE
*
1 行出现错误:
ORA-01157:
无法标识/锁定数据文件 11 - 请参阅 DBWR 跟踪文件
ORA-01110:
数据文件 11: 'E:ORACLEORADATAYTK92TESTTBS.DBF'

看来目标数据库的独占锁导致了这个问题,那么先在目标数据库中将表空间置回只读状态:

SQL> ALTER TABLESPACE TESTTBS READ ONLY;

表空间已更改。

下面在源数据库再次将表空间ONLINE

SQL2> ALTER TABLESPACE TESTTBS ONLINE;
ALTER TABLESPACE TESTTBS ONLINE
*
1 行出现错误:
ORA-01122:
数据库文件 11 验证失败
ORA-01110:
数据文件 11: 'E:ORACLEORADATAYTK92TESTTBS.DBF'
ORA-01204:
文件号是10而不是 11 - 文件错误

这次错误信息发生了变化,根据错误信息的描述可以确定,Oracle在加载表空间到目标数据库的时候,会根据目标数据库数据文件的序号修改加载的数据文件,因此源数据库读取数据文件报错。

从这里也可以看到,虽然表空间只读加载到目标数据库,但是数据文件的头信息是会被目标数据库所修改的。

这个表空间可以被两个数据库同时打开,而且目标数据库可以使用读写方式打开,但是这个数据文件对于源数据库来说已经发生了改变,大部分情况下,一旦数据库重新加载这个文件就会出现异常。

yangtingkun 发表于:2008.11.19 21:23 ::分类: ( ORACLE ) ::阅读:(404次) :: 评论 (2)
re: 同一个表空间能否被多个数据库同时打开(三) [回复]

您好,能请教一个RMAN得操作问题否?

有一单机数据库,用RMAN备份,然后想恢复到一个新建得RAC中,
请问:1) 这能实现否?
2)能得话,大概注意些什么?

谢谢

ass 评论于: 2008.11.20 14:24
re: 同一个表空间能否被多个数据库同时打开(三) [回复]

即使你希望我帮你解决问题,也请把问题放到相关的主题下提出。

yangtingkun 评论于: 2008.11.20 15:40

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...