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

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

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

这篇文章描述通过迁移表空间的方式在两个数据库加载同一个表空间。

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


如果采用迁移表空间的方式,同一个表空间的数据文件甚至可以被不同版本的两个数据库同时打开。

SQL> CONN YANGTK/YANGTK@YTK92已连接。
SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 -
Production PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for 32-bit Windows: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------------
E:ORACLEORADATAYTK92SYSTEM01.DBF
E:ORACLEORADATAYTK92UNDOTBS01.DBF
E:ORACLEORADATAYTK92CWMLITE01.DBF
E:ORACLEORADATAYTK92DRSYS01.DBF
E:ORACLEORADATAYTK92EXAMPLE01.DBF
E:ORACLEORADATAYTK92INDX01.DBF
E:ORACLEORADATAYTK92ODM01.DBF
E:ORACLEORADATAYTK92TOOLS01.DBF
E:ORACLEORADATAYTK92USERS01.DBF
E:ORACLEORADATAYTK92XDB01.DBF

已选择10行。

SQL> CREATE TABLESPACE TESTTBS DATAFILE 'E:ORACLEORADATAYTK92TESTTBS.DBF' SIZE 10M;

表空间已创建。

SQL> CREATE TABLE T_TESTTBS (ID NUMBER) TABLESPACE TESTTBS;

表已创建。

SQL> INSERT INTO T_TESTTBS SELECT ROWNUM FROM TAB;

已创建20行。

SQL> COMMIT;

提交完成。

SQL> ALTER TABLESPACE TESTTBS READ ONLY;

表空间已更改。

SQL> SHOW PARAMETER DB_BLOCK_SIZE

NAME TYPE VALUE
------------------------------------ ----------- ------------
db_block_size integer 8192

9i上面的准备工作已经完成,下面执行表空间迁移的导出:

E:>exp """/ as sysdba""" file=testtbs.dmp tablespaces=testtbs tts_full_check=y transport_tablespace=y

Export: Release 9.2.0.4.0 - Production on 星期二 11 18 22:50:56 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

连接到: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集: 将不会导出表数据(行)关于导出可传输的表空间元数据...用于表空间 TESTTBS...
.
正在导出群集定义
.
正在导出表定义
. .
正在导出表 T_TESTTBS
.
正在导出引用完整性约束条件
.
正在导出触发器
.
结束导出可传输的表空间元数据在没有警告的情况下成功终止导出。

导出操作必须由低版本9204EXP来完成。

下面登陆10g,检查目标表空间是否能顺利导入:

SQL> CONN YANGTK/YANGTK@YTK102已连接。
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

SQL> SHOW PARAMETER DB_BLOCK_SIZE

NAME TYPE VALUE
------------------------------------ ----------- -------------------------
db_block_size integer 8192
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------
E:ORACLEORADATAYTK102USERS01.DBF
E:ORACLEORADATAYTK102SYSAUX01.DBF
E:ORACLEORADATAYTK102UNDOTBS01.DBF
E:ORACLEORADATAYTK102SYSTEM01.DBF
E:ORACLEORADATAYTK102EXAMPLE01.DBF
E:ORACLEORADATAYTK102YANGTK01.DBF
E:ORACLEORADATAYTK102LOB_SPACE01.DBF
E:ORACLEORADATAYTK102YANGTK02.DBF
E:ORACLEORADATAYTK102TEST01.DBF

已选择9行。

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
YANGTK
LOB_SPACE
TEST

已选择9行。

10g环境的DB_BLOCK_SIZE9i环境一致,不需要额外设置DB_NK_CACHE_SIZE,且目标表空间在10g数据库中不存在,下面就可以执行导入了。注意,这里并没有做任何的COPY操作,直接根据9i表空间数据文件的位置导入目标表空间:

E:>imp """/ as sysdba""" file=e:testtbs.dmp transport_tablespace=y tablespaces=testtbs datafiles=e:oracleoradataytk92testtbs.dbf tts_owners=yangtk

Import: Release 10.2.0.1.0 - Production on 星期二 11 18 22:58:47 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V09.02.00 创建的导出文件即将导入可传输的表空间元数据...已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
.
正在将 SYS 的对象导入到 SYS
.
正在将 SYS 的对象导入到 SYS
.
正在将 YANGTK 的对象导入到 YANGTK
. .
正在导入表 "T_TESTTBS"成功终止导入, 没有出现警告。

现在目标表空间已经在10g环境下被导入,最后检查表空间中数据是否正确:

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
YANGTK
LOB_SPACE
TEST
TESTTBS

已选择10行。

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
---------------------------------------------------------
E:ORACLEORADATAYTK102USERS01.DBF
E:ORACLEORADATAYTK102SYSAUX01.DBF
E:ORACLEORADATAYTK102UNDOTBS01.DBF
E:ORACLEORADATAYTK102SYSTEM01.DBF
E:ORACLEORADATAYTK102EXAMPLE01.DBF
E:ORACLEORADATAYTK102YANGTK01.DBF
E:ORACLEORADATAYTK102LOB_SPACE01.DBF
E:ORACLEORADATAYTK102YANGTK02.DBF
E:ORACLEORADATAYTK102TEST01.DBF
E:ORACLEORADATAYTK92TESTTBS.DBF

已选择10行。

SQL> SELECT COUNT(*) FROM T_TESTTBS;

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

yangtingkun 发表于:2008.11.18 23:31 ::分类: ( ORACLE ) ::阅读:(533次) :: 评论 (0)

发表评论
标题

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

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


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