利用exp备份历史数据
【IT168 技术文档】通过exp传输表空间的特性对一些大库的历史数据进行备份,备份之后可以释放表空间及其文件,来用于存放新的数据。当需要使用历史数据时,可以利用imp的传输表空间特性将历史数据的备份导入到库中。
测试:
--创建测试表空间test和测试表test
SQL> create tablespace test datafile 'd:oracleoradatatest9test.dbf' size 10m
autoextend on;
表空间已创建。
SQL> create table test tablespace test as select * from dba_objects;
表已创建。
SQL> insert into test select * from test;
已创建6178行。
SQL> commit;
提交完成。
SQL> select count(1) from test;
COUNT(1)
----------
12356
--设置test表空间只读
SQL> alter tablespace test read only;
表空间已更改。
--按表空间传输模式exp导出test表空间,这里只是包含定义,并没有数据导出。
D:oracleora92bin>exp transport_tablespace=y tablespaces=test file=test.dmp
Export: Release 9.2.0.1.0 - Production on 星期五 6月 16 15:47:39 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
用户名: / as sysdba
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 ZHS16CGB231280 字符集 (可能的字符集转换)
注: 将不会导出表数据(行)
关于导出可传输的表空间元数据...
用于表空间 TEST...
. 正在导出群集定义
. 正在导出表定义
. 正在导出表 TEST
. 正在导出引用完整性约束条件
. 正在导出触发器
. 结束导出可传输的表空间元数据
在没有警告的情况下成功终止导出。
--手工备份test表空间对应的数据文件,如果是裸设备,则用dd。
C:>copy d:oracleoradatatest9test.dbf test.dbf
已复制 1 个文件。
--删除test表空间,这样那些空间就可以被新的表空间利用了。
SQL> drop tablespace test including contents and datafiles;
表空间已删除。
--有朝一日,想使用历史数据了,可以把数据导入。这里的datafiles指定的是上面表空间对应数据文件的备份。
D:oracleora92bin>imp transport_tablespace=y tablespaces=test datafiles='c:test.dbf' file=test.dmp
Import: Release 9.2.0.1.0 - Production on 星期五 6月 16 15:51:45 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
用户名: / as sysdba
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
关于导入可传输表空间元数据...
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
导入服务器使用ZHS16CGB231280字符集 (可能的字符集转换)
. 正在将SYS的对象导入到 SYS
. 正在将SYSTEM的对象导入到 SYSTEM
. 正在导入表 "TEST"
成功终止导入,但出现警告。
--查询,数据都恢复了。
SQL> conn system/oracle
已连接。
SQL> select count(1) from test;
COUNT(1)
----------
12356
