以下是我平时用客户端备份和恢复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/xxx_password@xxx_instanceid FILE=/tmp/backup/dump.dmp FULL=n TABLESPACES =xxx_table_space log=/tmp/backup/db_exp.log 要导出某一张表(或某几张): exp xxx_user/xxx_password@ip: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/xxx_password@orcl\' FILE=/tmp/backup/dump.dmp FULL=Y log=/tmp/backup/db_exp.log #导入(不要用SYSTEM等,用要导入的用户名): imp xxx_user/xxx_password@orcl FILE=/opt/dump3.dmp ignore=y # 导入 有错误继续 imp xxx_user/xxx_password@orcl FILE=/opt/dump3.dmp ignore=y # 导入指定的表 imp xxx_user/xxx_password@orcl FILE=/opt/dump4.dmp TABLESPACES=xxx_table_space full=n tables=X,Y,ZZZ rows=y ignore=Y imp xxx_user/xxx_password@orcl FILE=/opt/dump4.dmp FROMUSER=XXX_USER TOUSER=XXX_USER tables=X rows=y ignore=Y #约束不要? CONSTRAINTS=n #导入密码有特殊符号的时候 imp \'XXX_USER/1234*AAA@orcl\' 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/XXX_PASSWORD@orcl file=dump1.dmp tables=TABLE1 rows=y indexes=n triggers=n grants=n
文章评论