在生产环境中,Oracle 数据库每天凌晨 3:00 进行全库数据备份,由于数据巨大,因此备份出来的数据都直接进行压缩保存,并按 db<MMDD>.dmp.gz 规则进行命名。
因测试要求,需将 db1113.dmp.gz 备份文件中的 cw 用户数据导入到测试服务器上,由于测试服务器中磁盘空间不足,无法正常将 db1113.dmp.gz 文件进行解压,因此使用 mknod -p 创建管道的方式进行用户数据导入。
$ df -g | grep Oracle
/dev/oralv 90.00 41.08 55% 17421 1% /Oracle
$ ls -l db1113.dmp.gz
-rw-r--r-- 1 root system 2804225957 Nov 13 12:58 db1113.dmp.gz
1. 删除 cwtest 用户及数据
$ sqlplus '/as sysdba'
SQL> DROP USER cwtest CASCADE;
2. 创建 cwtest 用户并授权
SQL> CREATE USER cwtest IDENTIFIED BY cw8899 DEFAULT TABLESPACE NNC_DATA01 TEMPORARY TABLESPACE temp;
SQL> GRANT connect,dba to cwtest;
SQL> exit
3. 通过 mknod -p 创建管道 /Oracle/imppipe
$ mknod /Oracle/imppipe p
4. 导入 cw 用户数据到 cwtest 用户
$ imp cwtest/cw8899 file=/Oracle/imppipe fromuser=cw touser=cwtest & gunzip < db1113.dmp.gz > /Oracle/imppipe
5. 删除管道
$ rm -fr /Oracle/imppipe
PS: 利用管道也可以在导出数据时直接进行压缩,参考指令如下:
$ mknod /Oracle/exppipe p
$ exp system/manager full=y inctype=complete file=/Oracle/exppipe & gzip -9 < /Oracle/exppipe > /Oracle/db1113.dmp.gz
$ rm -fr /Oracle/exppipe