一、数据库中指定备份数据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;
五、参考文章
2.linux环境中Oracle数据库通过shell脚本实现数据泵expdp定期备份数据
3.oracle备份恢复---分享RMAN定时全备份和增备脚本(0+1)