1.在sysdba下执行:
创建directory 对象:
create directory DUMP_DIR as ‘/data/oracle/zx_data’;
2.修改directory目录的路径(注意:原路径正确的情况下,不需要修改路径):
create or replace directory DUMP_DIR as ‘/home/qry/baknas/bak/’
3./data/oracle/zx_data这个文件路径也要在oracle下创建,并且zx_data这个文件的用户必须是oracle如果不是需要修改:
chown oracle:oinstall zx_data
select * from dba_directories where directory_name = ‘DUMP_DIR’;
4.给需要导出数据的用户授权
grant read,write on directory DUMP_DIR to user1;
grant read,write on directory DUMP_DIR to user2;
5.EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
对于10g以上的服务器:exp:空表导不出来,expdp:可以导出空表;
EXPDP导出数据
expdp user1/pass_wd@IP1521/orcl directory=DUMP_DIR dumpfile=user1_20230518.dmp logfile=user1_20230518.log;
expdp user2/pass_wd@IP:1521/orcl directory=DUMP_DIR dumpfile=user2_20230518.dmp logfile=user2_20230518.log;
impdp导入数据:
先查看 select * from dba_directories where directory_name = ‘DUMP_DIR’;
覆盖原有表数据:table_exists_action=replace(replace,删除已存在的表,重建表并追加新数据)
append,追加数据
truncate,导入作业会截断表,然后为其追加数据
impdp user1/pass_wd@IP:1521/orcl table_exists_action=replace directory=DUMP_DIR dumpfile=user1_20230518.dmp logfile=user1_20230518.log
impdp user2/pass_wd@IP:1521/orcl table_exists_action=replace directory=DUMP_DIR dumpfile=user2_20230518.dmp logfile=user2_20230518.log
下面的例子是备份30天内的数据
#!/bin/bash
#!/usr/bin/expect
#################shell脚本说明#############################
#备份30日内的数据,超过30日的自动删除
#在sysdba下执行:
#创建directory 对象:
#create directory DUMP_DIR as '/data/zx_data';
#修改directory目录的路径:
#create or replace directory DUMP_DIR as '/data/zx_data';
#/data/zx_data这个文件路径也要在oracle下创建,并且zx_data这个文件的用户必须是oracle如果不是需要修改:
#chown oracle:oinstall zx_data
#select * from dba_directories where directory_name = 'DUMP_DIR';
#impdp导入数据:
#先查看 select * from dba_directories where directory_name = 'DUMP_DIR';
#覆盖原有表数据:table_exists_action=replace(replace,删除已存在的表,重建表并追加新数据)
#append,追加数据
#truncate,导入作业会截断表,然后为其追加数据/根据实际情况配置用户,密码,SID
#impdp user1/pass_wd@IP:1521/orcl table_exists_action=replace directory=DUMP_DIR dumpfile=user1_20230710.dmp logfile=user1_20230710.log
#impdp user2/pass_wd@IP:1521/orcl table_exists_action=replace directory=DUMP_DIR dumpfile=user2_20230710.dmp logfile=user2_20230710.log
#--------------------------------------------------------------------------------------------------------
#根据实际情况配置
ORACLE_BASE=/data/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
ORACLE_SID=orcl
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
export NLS_Lang=CHINESE_CHINA.ZHS16GBK
file_log="/data/zx_data/renwu.txt"
echo "***************任务开始***************" >>${file_log}
sys_date=$(date "+%Y%m%d %H:%M:%S") #系统时间
start_date=$(date -d "now" +%Y%m%d) #备份开始时间
end_date=$(date -d "30 day ago" +%Y%m%d) #备份结束时间
echo "任务执行时间:"$sys_date >>${file_log}
echo "备份当次日期:"$start_date >>${file_log}
echo "删除当次日期:"$end_date >>${file_log}
cd /data/zx_data/
#EXPDP导出数据/根据实际情况配置用户,密码,SID
expdp user1/pass_wd@IIP:1521/orcl directory=DUMP_DIR dumpfile=user1_"$start_date".dmp logfile=user1_"$start_date".log
expdp user2/pass_wd@IP:1521/orcl directory=DUMP_DIR dumpfile=user2_"$start_date".dmp logfile=user2_"$start_date".log
#删除超过指定天的数据
rm -rf user1_"$end_date".zip
#将当天数据压缩打包
zip -r user1_"$start_date".zip *"$start_date"*
#备份结束删除当日数据文件
rm -rf user1_"$start_date".dmp
rm -rf user1_"$start_date".log
rm -rf user2_"$start_date".dmp
rm -rf user2_"$start_date".log
echo "***************任务结束***************" >>${file_log}