在一切开始前,先将服务关闭。
1. 开启归档
l 切换到oracle用户 su - oracle
l 使用sqlplus进入数据库 sqlplus / as sysdba
l 查看是否开启归档模式 archive log list;
如果数据库模式为Archivemode,即开启归档,可直接进入第二步,为No Archive Mode则继续向下走。
l 关闭数据库 shutdown immediate
l 启动数据库实例到mount状态 startup mount
l 更改数据库模式为归档模式 alter database archivelog;
l 打开数据库 alter database open
2. 原数据库数据导出
l 搜索处于open状态的用户。 select username,account_statusfrom dba_users;
其中除了sys和system以外,处于open的用户都是需要备份的。
l 创建备份目录 create directory dmp as '/home/OracleBack/expdpbak';
l 为备份目录赋权 chmod -R 775 /home/OracleBack/expdpbak/
l 在oracle用户下执行备份 expdp \'/ as sysdba\' directory=dmpdumpfile=2017.dmp logfile=2017.file schemas=zytk35 多用户用()包含,用,分开。
l 查看备份文件。
3. 还原文件到新服务器
l 在新服务器创建备份目录 create directory dmp as '/home/OracleBack/expdpbak';
l 为备份目录赋权 chmod -R 775 /home/OracleBack/expdpbak/
l 如果原服务器可以和新服务器ping通,则直接使用scp命令传输备份文件 scp 2017.dmp zytk35@192.168.4.222:/home/OracleBack/expdpbak/
l 如果无法ping通,则使用xmanage先将dmp传到操作机再传到新服务器
l 将数据还原 expdpbak]$ impdp \'/ as sysdba\' directory=dmpdumpfile=2017.dmp schemas=zytk35
4. 执行自动备份脚本,和rman备份脚本
l 首先将两个脚本文件zytk35_expdp_backup.sh,zytkdbfull .sh传到新服务器下,路径自定。习惯为/home/oracle/oraclescripts
l 为文件夹赋权 chmod -R 775 /home/oracle/oraclescripts
l 使用root用户编辑zytk35_expdp_backup.sh文件 vim /home/oracle/oraclescripts/zytk35_expdp_backup.sh
export DateStr=`date "+%Y%m%d"` //到达删除线的时间 export DateStr2=`date "+%Y%m%d_%H%M%S"` //本地备份时间
su - oracle <<EON //存储备份 if test -d /home/OracleBack/expdpbak then : else mkdir -p /home/OracleBack/expdpbak fi
expdp \'/ as sysdba\' directory=dmp dumpfile=expdp_$DateStr2.dmp logfile=expdp_$DateStr2.log schemas=zytk35
exit EON
if test -d /home/oracle/expdpbak //本地备份,如果没有存储,则可以省略 then : else mkdir -p /home/oracle/expdpbak fi
#cp /home/OracleBack/expdpbak/expdp_$DateStr2.* /home/oracle/expdpbak export DateStr=`date -d "7 days ago" "+%Y%m%d"` //将str定义为7天前的时间 cd /home/OracleBack/expdpbak/ tar zcf expdp_$DateStr2.tar.gz expdp_$DateStr2.dmp expdp_$DateStr2.log ftp -n -v 192.168.28.4 <<EOF //异地备份 user expdp expdp bin put expdp_$DateStr2.tar.gz prompt mdelete expdp_$DateStr*.tar.gz //删除7天前的备份 bye EOF mv expdp_$DateStr2.tar.gz /home/oracle/expdpbak/
str=expdp_$DateStr find /home/OracleBack/expdpbak/ -name "$str*" -exec rm {} \; //删除存储上七天前的 find /home/oracle/expdpbak/ -name "$str*" -exec rm {}\; //删除本地七天前的
unset DateStr unset DateStr2
|
l 执行一次脚本./zytk35_expdp_backup.sh
l 无报错,进入/home/OracleBack/expdpbak下,查看是否有备份文件出现。
l 编辑rman备份脚本 vim zytkdbfull\ .sh
#!/bin/sh #su - oracle source /home/oracle/.bash_profile current_day=`date +%Y%m%d` expired_day=`date --date='8 days ago' +%Y%m%d` #bakfile_path=/data/rmanbak/RmanBackupSet bakfile_path=/home/OracleBack/rmanbak backupset_path=$bakfile_path/$current_day
if test -d $bakfile_path/$current_day then : else mkdir -p $backupset_path fi
$ORACLE_HOME/bin/rman log $backupset_path/rmanbak-$ORACLE_SID-`date +%Y%m%d-%H%M`.log target / <<EOF CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$backupset_path/ctl_%F'; CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET; CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '$backupset_path/full_%T_%U' MAXPIECESIZE 4G; RUN{ BACKUP FULL tag 'ykt_db_full' DATABASE SKIP INACCESSIBLE PLUS ARCHIVELOG FORMAT '$backupset_path/arch_%T_%U' DELETE ALL INPUT; } ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK; REPORT OBSOLETE; DELETE NOPROMPT OBSOLETE; CROSSCHECK BACKUPSET; DELETE NOPROMPT EXPIRED BACKUP; LIST BACKUP SUMMARY; RELEASE CHANNEL; EOF #cd $bakfile_path #tar zcvf rman-$ORACLE_SID-current_day.tar.gz $current_day #ftp -n -v 192.168.6.134 <<! #user zytk32 zytk32 #bin #put rman-$ORACLE_SID-$current_day.tar.gz #delete rman-$ORACLE_SID-$expired_day.tar.gz #bye #! #rm -f rman-$ORACLE_SID-$current_day.tar.gz |
l 在oracle下执行rman脚本
如图为成功执行。
l 设定linux定时备份任务 在root用户下 crontab -e
将如下语句添加
00 14 * * * /home/oracle/oraclescripts/zytk35_expdp_backup.sh
00 09 * * * /home/oracle/oraclescripts/zytk35_expdp_backup.sh
00 03 * * * /home/oracle/oraclescripts/dbfull.sh
l 查看该用户下的crontab服务是否创建成功 crontab -l
l 启动crontab服务 sudo service crond start
结束。