Oracle dump exp imp 导出导入备份恢复数据

2021-10-26 410点热度 0人点赞 0条评论

以下是我平时用客户端备份和恢复Oracle数据用到的命令记录,供参考

服务器端备份,详见:https://blog.terrynow.com/2021/11/21/oracle-server-side-backup-examples/

备份相关脚本的介绍。详见:https://blog.terrynow.com/2021/10/22/linux-oracle-client-backup-script-example/

包含:

  • 设置环境变量(方便cron排程执行)
  • 全部导出
  • exp按表空间来导出
  • exp按用户名来导出
  • exp仅导出某(几)张表
  • imp导入指定的表空间
  • imp导入指定的表
  • imp/exp遇到有特殊字符的密码的处理
#导入和导出之前都要设置字符集等,有时候有warning切换下NLS_LANG试下
export LANG="en_SU.UTF-8"
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 
#export NLS_LANG="Simplified Chinese_china".ZHS16GBK
export ORACLE_BASE=/oracle/
export ORACLE_HOME=/oracle/product/10g
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

#只导出部分表空间tablespace,多个表空间之间用逗号隔开
exp xxx_user/[email protected]_instanceid FILE=/tmp/backup/dump.dmp FULL=n TABLESPACES =xxx_table_space log=/tmp/backup/db_exp.log
要导出某一张表(或某几张):
exp xxx_user/[email protected]:1521/xxx_instanceid FILE=/tmp/dump_2015.dmp FULL=n tables=table1,table2 log=/tmp/db_exp.log
#如果要导出远程机器:
exp xxx_user/[email protected]:1521/xxx_instanceid FILE=/tmp/backup/dump.dmp FULL=n

#全部
exp \'xxx_user/[email protected]\' FILE=/tmp/backup/dump.dmp FULL=Y log=/tmp/backup/db_exp.log

#导入(不要用SYSTEM等,用要导入的用户名):
imp xxx_user/[email protected] FILE=/opt/dump3.dmp ignore=y
# 导入 有错误继续
imp xxx_user/[email protected] FILE=/opt/dump3.dmp ignore=y
# 导入指定的表
imp xxx_user/[email protected] FILE=/opt/dump4.dmp TABLESPACES=xxx_table_space full=n tables=X,Y,ZZZ  rows=y ignore=Y
imp xxx_user/[email protected] FILE=/opt/dump4.dmp FROMUSER=XXX_USER TOUSER=XXX_USER tables=X  rows=y ignore=Y

#约束不要?
CONSTRAINTS=n

#导入密码有特殊符号的时候
imp \'XXX_USER/1234*[email protected]\' FILE=/home/oracle/dump/dayi.dmp TABLESPACES=XXX_TABLESPACE full=n tables=TABLE1 rows=y ignore=Y CONSTRAINTS=n

#或者直接输入exp按照提示一步步来
imp
#20170915测试下来要输入要导入的username(就是现在Oracle里的用户,目标用户)
#回车后,输入SYSTEM用户名和密码,等下一次要输入用户名的时候,输入要导入的用户(就是dmp里的用户,source用户)
#出现如下的时候,可以输入要导入的表名,每次按一下回车,最后结束就直接按回车
Enter table(T) or partition(T:P) names. Null list means all tables for user
Enter table(T) or partition(T:P) name or . if done: V6_USER

#如果导入的话要覆盖掉的话,可以先删掉原来的user:
drop user XXX_USER cascade;

#或者删掉表
select 'alter table ' || owner || '.'|| table_name || ' disable constraint ' || constraint_name ||';'from all_constraints where owner='XXX_USER' and constraint_type = 'R';

select 'truncate table ' || owner || '.' || table_name ||';' from all_tables where owner='XXX_USER';
#是否需要drop?应该不需要drop table
#select 'truncate table ' || table_name ||';' from all_tables where owner='XXX_USER';

--再建立一个
CREATE USER "XXX_USER" PROFILE "DEFAULT" IDENTIFIED BY "XXX_PASSWORD" DEFAULT TABLESPACE "XXX_TABLE_SPACE" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "XXX_USER";
GRANT "RESOURCE" TO "XXX_USER";
GRANT CREATE ANY VIEW TO "XXX_USER";

#仅仅导出一张表的数据
exp XXX_USER/[email protected] file=dump1.dmp tables=TABLE1 rows=y indexes=n triggers=n grants=n

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论