ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 怎样移动Oracle数据库的表空间

怎样移动Oracle数据库的表空间

原创 Linux操作系统 作者:buptdream 时间:2008-12-04 17:41:49 0 删除 编辑
怎样移动Oracle数据库的表空间
  
   在使用Oracle数据库的过程中,经常会碰到将
数据库中的数据从

一个数据库移动到另一个数据库的情况,假如移动的数据量不是太大,

我们能够使用EXPORT/IMPORT将数据进行导出/导入。但假如需要搬移的

数据量很庞大,则用这种方法进行数据移动很缓慢。在Oracle8i版本中

,提供了能够对表空间进行移动的方法,通过搬移表空间可大大降低数

据迁移的速度,提高工作效率。
  对表空间进行移动时应注意以下几点:
(1)源数据库和目标数据库必须在相同硬件平台上。例如我们能够在

Sun Solaris平台的Oracle数据库之间搬移表空间,也能够在Windows

2000平台的Oracle数据库之间搬移表空间,但是不能在Sun

Solaris/Windows 2000之间搬移表空间。
(2)源数据库和目标数据库的字符集和民族字符集必须相同。
(3)不能将表空间搬移到具备同名表空间的目标数据库中。
(4)在Oracle8i之间搬移表空间时,源数据库和目标数据库的数据块

尺寸一定要相同。
  
  下面我们以Oracle8i(8.1.5) for Windows 2000为例说明移动表空

间的具体方法。
  
  一、检查要移动的表空间
  
  当搬移表空间时,假如被搬移表空间中的数据没有和其他表空间中

的数据有参照关系,则可直接对此表空间进行搬移;假如被搬移表空间

中的数据和其他表空间中的数据有参照关系,那么在移动表空间时,凡

和被移动表空间有参照关的表空间也应进行搬移,否则移动到目的地的

表空间中的数据是不完整的。例如表空间local包含了表A1,而表空间

local2包含了表A1的索引IDX_A1,此时假如要搬移表空间local,则也

应同时搬移表空间local2,此时我们称表空间local、local2为自包含

的。在进行表空间搬移之前,能够用下列方法查看被搬移的表空间是否

为自包含表空间。
  
  SQL>execute dbms_tts.transport_set_check(ts_list=>’local

’,
  incl_constraints=>TRUE);
  
  参数ts_list用于指定要搬移的表空间,incl_constraints用于指

定是否检查完整性约束。
  
  执行完过程dbms_tts.transport_set_check之后,系统将违反自包

含表空间的信息存入临时表transport_set_violations。查询该表时,

假如没有返回任何信息,说明表空间是自包含的,否则会返回非自含表

空间的原因。

  二、导出表空间信息
  
  为保持数据文档的一致性,在导出自包含表空间数据字典信息之前

,应首先将自包含表空间转变为只读状态,作用是使表空间信息不会发

生变化。
  
  SQL>alter tablespace local read only;
  
  SQL>alter tablespace local2 read only;
  
  将表空间配置为只读关态时,会在表空间数据文档上发出检查点,

并且其内容不会发生任何变化,此时就能够导出表空间信息了。导出表

空间仅仅是导出和其相关的数据字典信息,而不是导出表空间的任何数

据,使用如下操作系统命令可导出表空间local和local2的信息。
  
  D:\>EXP transport_tablespace=y tablespaces=local,local2

file=
  
  expdat.dmp
  
  用户名:
internal/oracle@testas sysdba
  
  参数:transport_tablespace搬移表空间选项,Y表示导出表空间

信息;tablespaces用于指定要导出的表空间;file用于指定存放导出

信息的文档。
  
  导出表空间信息之后,使用操作系统命令将表空间数据文档和导出

文档(expdat.dmp)复制到目标数据库所在机器相应的目录中。

bbs.bitsCN.com
  
  三、导入表空间
  
  在将表空间数据文档和导出文档复制到目标数据库所在机器之后,

就能够将表空间信息导入到目标数据库中了。导入自包含表空间实际是

将数据字典信息从导出文档装载到目标数据中,如表空间名称、表空间

所对应数据文档连同数据对象名称等。具体的操作系统命令如下:
  
  D:\>IMP transport_tablespace=y datafiles= ’d:\localdb\

local1.dbf’
  
  ,’d:\localdb\local2.dbf’
  
  用户名:
internal/oracle@testas sysdba
  
  当执行完上述命令之后,会将表空间local和local2及其所包含的

任何数据对象信息导入到目标数据库中。
  
  注意:在Oracle8.1.5中搬移表空间时,源表空间中存放的任何数

据对象的任何者在目标数据库中必须存在,假如不存在,则应在导入表

空间之前建立相应的用户,然后再导入表空间。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10701850/viewspace-504754/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 执行计划
请登录后发表评论 登录
全部评论

注册时间:2008-12-04

  • 博文量
    25
  • 访问量
    336150