oracle表空间如何导入导出?

发布时间:2019-10-08编辑:脚本学堂
本文介绍了oracle表空间导入与导出的方法,当数据量较大时,可以考虑对表空间进行移动的方法,通过搬移表空间可大大降低数据迁移的速度,提高工作效率。

oracle数据从一个数据库移动到另一个数据库的情况,如果移动的数据量不是太大,可以使用export/import将数据进行导出/导入。
当数据量较大时,可以考虑对表空间进行移动的方法,通过搬移表空间可大大降低数据迁移的速度,提高工作效率。

对表空间进行移动时应注意以下几点:
1)源数据库和目标数据库必须在相同硬件平台上。
2)源数据库和目标数据库的字符集和民族字符集必须相同。
3)不能将表空间搬移到具有同名表空间的目标数据库中。
4)在oracle9i之间搬移表空间时,源数据库和目标数据库的数据块尺寸一定要相同。

一、检查要移动的表空间
当搬移表空间时,如果被搬移表空间中的数据没有和其它表空间中的数据有参照关系,则可直接对此表空间进行搬移;
如果被搬移表空间中的数据与其它表空间中的数据有参照关系,那么在移动表空间时,凡与被移动表空间有参照关的表空间也应进行搬移,否则移动到目的地的表空间中的数据是不完整的。
例如:表空间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
用户名:system/anchor@orcl as sysdba
参数:transport_tablespace搬移表空间选项,y表示导出表空间信息;tablespaces用于指定要导出的表空间;file用于指定存放导出信息的文件。
导出表空间信息之后,使用操作系统命令将表空间数据文件和导出文件(expdat.dmp)复制到目标数据库所在机器相应的目录中。

三、导入表空间
在将表空间数据文件和导出文件复制到目标数据库所在机器之后,就可以将表空间信息导入到目标数据库中了。
导入自包含表空间实际是将数据字典信息从导出文件装载到目标数据中,如表空间名称、表空间所对应数据文件以及数据对象名称等。

命令如下:
 

复制代码 代码示例:
d:>imp transport_tablespace=y datafiles= 'd:localdblocal1.dbf'
,'d:localdblocal2.dbf’
用户名:system/anchor@orcl as sysdba

当执行完上述命令之后,会将表空间local和local2及其所包含的所有数据对象信息导入到目标数据库中。
注意:在搬移表空间时,源表空间中存放的所有数据对象的所有者在目标数据库中必须存在,如果不存在,则应在导入表空间之前建立相应的用户,然后再导入表空间。

查看oracle表空间的创建时间
 

复制代码 代码示例:
select a.file_name,a.tablespace_name,to_char(b.creation_time,’yyyy-mm-dd’)creation_time from dba_data_files a,v$datafile b where a.file_id=b.file# order by tablespace_name;