Oracle导入导出操作指导-exp与imp

oracle 数据库导入到处

类似mysql 的mysqldump 和mysql 导入
命令 exp imp

使用

获取帮助

exp help=y
imp help=y

数据库示例:

~~~
create tablespace tzpf_dev_test datafile 'tzpf_dev_test.dbf' size 1024M autoextend on next 50M maxsize 8092M;

create temporary tablespace tzpf_dev_test_temp tempfile 'tzpf_dev_test_temp.dbf' size 1024m autoextend on next 50m maxsize 8000m extent management local;

create user tzpf_dev_test identified by 123456 default tablespace tzpf_dev_test temporary tablespace tzpf_dev_test_temp;

grant connect,resource,dba to tzpf_dev_test;
~~~

导出原理

  • 导出数据库
  • Export_start
  • ExpModes

https://docs.oracle.com/cd/B10501_01/server.920/a96652/ch01.htm#1004671

  • ExpOpts
  • ExpOpts_continued

导入原理









exp 导出

参考 https://docs.oracle.com/cd/B10501_01/server.920/a96652/ch01.htm#1004671

  • 查看表大小
SELECT SUM(BYTES)FROM USER_SEGMENTS WHERE SEGMENT_TYPE ='TABLE';

exp 导出空表

https://stackoverflow.com/questions/18924704/how-to-export-empty-tables-in-oracle

echo "SELECT 'ALTER TABLE '||table_name||' ALLOCATE EXTENT;' FROM user_tables WHERE segment_created = 'NO';"|sqlplus abc/test  | grep "ALTER TABLE" | sqlplus abc/test   

~~~
可用
echo "SELECT 'ALTER TABLE '||table_name||' ALLOCATE EXTENT;' FROM user_tables WHERE segment_created = 'NO'; " | sqlplus ftpf_dev/123456 | grep "ALTER TABLE" | sqlplus ftpf_dev/123456

~~~

  • 命令格式
exp username/password@instance file=filename full=y grants=y indexs=y log=logfile
  • 导出 abc账户下的数据库
exp abc/test1234 file=abc.dmp full=y 

expdp导出

expdp username/password dumpfile=test.dmp

参考: https://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_export.htm#i1007150

imp 导入

https://docs.oracle.com/cd/B10501_01/server.920/a96652/ch02.htm#1004685
DATA_ONLY=y 只导入数据

imp test/123456 file=abc.dmp full=y fromuser=test1 touser=test tables=t1 ignore=y 

impdp 导入

  • 帮助
impdp help=y
  • 开始导入
impdp username/password dumpfile=test.dmp

参考 https://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_import.htm#BEHDGDBG

修改导出dmp 文件表空间

方法1

exp 导出后 使用 vim 打开 dmp 文件
然后:  3,$ s/表空间名/新表空间/g wq 写入
imp 导入 登陆用户 检查 select table_name,tablespace_name from user_tables; #查询当前用户所有表 所在表空间

方法二

1、修改UAT环境user用户的表空间名为PRD环境对应的表空间名:(修改之前记得备份)
select username,default_tablespace from dba_users where username=upper('ftpf_dev'); # 查询用户的表空间名
select table_name,tablespace_name from user_tables where tablename='TABLENAME'; # 查询某个表在那个表空间下
select table_name,tablespace_name from user_tables; #查询当前用户所有表 所在表空间

#ALTER TABLESPACE irtc RENAME TO FTPF_DEV1; 修改表空间名 TO的表空间名必须不存在

ALTER TABLESPACE FTPF_DEV RENAME TO FTPF_DEV1;   #修改FTPF_DEV 表空间命为 FTPF_DEV1 FTPF_DEV1表空间不能存在 不然报错

2、导出UAT环境user用户:
EXP user/pwd@TNS_UAT BUFFER=64000 FILE=D:\SCHEMA_USER.dmp OWNER=USER

3、将导出的dmp文件导入给PRD环境的user用户:
IMP user/pwd@TNS_PRD BUFFER=64000 FILE=D:\SCHEMA_USER.dmp FROMUSER=USER TOUSER=USER
4、还原UAT环境user用户的表空间名:

ALTER TABLESPACE TBSP_PRD RENAME TO TBSP_UAT 

5、OK,方法二完成。

数据重新导入

  1. 查询用户的默认表空间命及临时表空间命
select lower(username),lower(default_tablespace),lower(temporary_tablespace) from dba_users where username = upper('fcpf_dev');
  1. 导出数据库
exp fcpf_dev/fcpf_dev file=fcpf_dev_0719.dmp 
  1. 如果导入非 fcpf_dev 用户就需要修改表空间命
    参考 修改导出dmp 文件表空间
  2. 删除用户 需要导入的数据库
drop user fcpf_dev CASCADE; 
  1. 重新创建需要导入数据库的用户
create user fcpf_dev identified by 123456 default tablespace FCPF temporary tablespace temp;  # 写入上面查到的用户默认表空间及临时表空间吗命
grant connect,resource,dba to fcpf_test ;  #授权
  1. 导入数据库
imp fcpf_dev/123456 fromuser=fcpf_dev touser=fcpf_test file=fcpf_dev_0719.dmp 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

附件列表

猜你喜欢

转载自www.cnblogs.com/flyinghappysheep/p/9724992.html