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