linux环境下Oracle数据库通过shell脚本实现数据泵expdp定期备份数据,并impdp导入恢复数据库
•
数据库
一、数据库中指定备份数据expdp目录创建
/**切换linux用户,建立相应的备份目录*/ Root user: su - root mkdir -p /dmpbackup/dump mkdir -p /dmpbackup/scripts chown -R oracle:oinstall /dmpbackup chmod -R 755 /dmpbackup /**切换Oracle用户,分配目录Oracle相应的权限*/ Oracle user: su - oracle sqlplus / as sysdba SQL> create or replace directory dump as '/dmpbackup/dump'; #新建dump目录 SQL> Grant read,write on directory dump to ahs2yy; #授权 SQL> alter ahs2yy set deferred_segment_creation = FALSE; #延迟分配参数
二 、设置自动备份脚本,并自动删除三天前的备份数据
/**切换Oracle用户,创建脚本文件*/
su - oracle
cd /dmpbackup/scripts
vi db_backup.sh
/**db_backup.sh 文件内容为下面脚本*/
#!/bin/bash
# 设置环境变量
export ORACLE_HOME=/home/app/oracle/product/11.2.0 #根据实际情况设置
export ORACLE_SID=ORCL #根据实际情况设置
export PATH=$ORACLE_HOME/bin:$PATH
# 配置备份目录和文件名
BACKUP_DIR=/dmpbackup/dump #根据1设置的dump目录
DATE=$(date +%Y%m%d)
BACKUP_FILE="expdp_${ORACLE_SID}_${DATE}.dmp"
BACKUP_LOG="expdp_${ORACLE_SID}_${DATE}.log"
# 使用expdp进行备份
expdp lirui/LRtech2022 directory=dump dumpfile=${BACKUP_FILE} logfile=${BACKUP_LOG}
# 删除3天前的备份
find ${BACKUP_DIR} -type f -mtime +3 -name "expdp_${ORACLE_SID}_*.dmp" -exec rm {} \;
find ${BACKUP_DIR} -type f -mtime +3 -name "expdp_${ORACLE_SID}_*.log" -exec rm {} \;
/**db_backup.sh 对脚本进行授权*/
chmod +x db_backup.sh
/**设置定时任务*/
crontab -e
/**定时任务,每天凌晨1点执行脚本*/
0 1 * * * /dmpbackup/scripts/db_backup.sh
三、impdp导入,数据库恢复
/**切换到Oracle用户*/ su - oracle sqlplus / as sysdba /**查询用户表空间文件的路径,然后在此目录下创建新的表空间*/ select name from v$datafile; /**查询用户临时表空间文件的路径,然后在此目录下创建新的临时表空间*/ select name from v$tempfile; /**创建默认表空间,关键字说明: tablespace后面的名称随便取; COM_ZHX.dbf名称随便取,后缀必须是.dbf,目录必须已经存在,如果不存在,在执行语句之前需要手动创建; size 10000M:代表初始分配大小; autoextend on next 1000M :代表当空间不够时,一次分配多大的空间。 datafile:表空间存储文件的路径,一般指在服务器上的存储路径*/ CREATE SMALLFILE TABLESPACE ttdmp DATAFILE '/home/app/oracle/oradata/orcl11g/ttdmp.dbf' SIZE 1000M AUTOEXTEND ON NEXT 200M MAXSIZE unlimited LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; /**创建临时表空间,关键字说明: tablespace后面的名称随便取; COM_ZHX_tmp.dbf名称随便取,后缀必须是.dbf,目录必须已经存在,如果不存在,在执行语句之前需要手动创建; size 2000M:代表初始分配大小; autoextend on next 500M :代表当空间不够时,一次分配多大的空间。 datafile:表空间存储文件的路径,一般指在服务器上的存储路径*/ CREATE TEMPORARY TABLESPACE ttdmp_tmp TEMPFILE '/alidata1/oracle/oradata/mdb/ttdmp_tmp.dbf' SIZE 500M autoextend on next 100M maxsize 8000M; /**创建用户并指定默认临时表空间,并给予用户相应的权限*/ create user test111 identified by test123 default tablespace ttdmp temporary tablespace ttdmp_tmp; grant connect,resource,dba to test111; /**创建相应导入的dmp文件存储目录并赋权*/ create or replace directory dmpdir as '/oradata'; grant read ,write on directory dmpdir to test111; /**切换root用户,赋予读写权限,并授予Oracle访问权*/ mkdir /oradata chmod -R 777 /oradata chown -R oracle:oinstall /oradata
四、导入数据
/**备份数据DMP新建立的文件夹*/ cp /dmpbackup/dump/expdp_ORCL_20230816.dmp /oradata /**切换到Oracle用户,执行导入*/ impdp test111/test123 directory=dmpdir dumpfile=expdp_ORCL_20230816.dmp remap_schema=lirui:test111; /**删除用户*/ drop user test111 cascade; /**删除表空间*/ drop tablespace COM_ZHX including contents and datafiles cascade constraints;
五、参考文章
1.expdp/impdp 数据泵导入导出
2.linux环境中Oracle数据库通过shell脚本实现数据泵expdp定期备份数据
3.oracle备份恢复—分享RMAN定时全备份和增备脚本(0+1)
4.dmp文件导入数据库服务器
5.oracle创建表空间和修改用户默认表空间
6.Oracle数据库创建用户、指定默认(创建)表空间、赋权限(dba、ETL必备)
7.【Oracle】数据库登陆错误:ORA-28000:the account is locked解决方法
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/5ae00a94a8.html
