关于单机oracle数据库的备份教程

在一切开始前,先将服务关闭。

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

 

 

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值