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

来源:互联网 发布:nginx访问js报错403 编辑:程序博客网 时间:2024/05/21 10:00

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

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

 

 

结束。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿老师教不会怎么办 学东西学不会怎么办 学不会汽修怎么办 挖掘机发票丢了怎么办 工会经费多缴怎么办 机票姓名错了怎么办 抹胸衣服下掉怎么办 穿抹胸很容易掉怎么办 抹胸衣服老掉怎么办 群里有低俗的人怎么办 老师不收礼物怎么办 发票跨年了怎么办 一用力就头疼怎么办 小孩天天玩游戏怎么办 手机分期人死了怎么办 人死了手机欠费怎么办 晚上想玩手机怎么办 孩子溺水后发烧怎么办 去台湾多次签证怎么办 怀孕不能玩手机怎么办 孕期天天玩手机怎么办 小孩子在家偷钱怎么办 小朋友被鸡抓伤怎么办 宝宝在学校不说怎么办? 宝宝不和小朋友玩怎么办 初中孩子不想上学怎么办 孩子装病不想上学怎么办 中学生叛逆不愿意上学怎么办 孩子去幼儿园哭闹怎么办 孩子哭闹不上学怎么办 孩子中班还哭怎么办 小孩子不爱上幼儿园怎么办 小孩子不爱去幼儿园怎么办 宝宝去幼儿园哭闹怎么办 宝宝上幼儿园哭闹怎么办 小朋友上幼儿园哭闹怎么办 迷路了怎么办幼儿故事 大班迷路了怎么办故事 玩手机眼睛干涩怎么办 宝睡觉不踏实怎么办 觉得自己老了怎么办