先来介绍一些不使用脚本我们直接使用命令备份与还原oracle数据库
Oracle数据备份:
步骤1备份用户数据。
1.使用linux系统下的数据库管理员帐号联接linux终端。
2.执行以下句子,创建“bak_dir”文件夹。
mkdirbak_dir
3.执行以下句子,为“bak_dir”文件夹赋于读、写和执行权限。
复制代码代码如下:
chmod777bak_dir
4.执行以下句子,以sysdba用户登入oracle数据库服务器。
sqlplus数据库管理员帐号/密码@数据库实例名assysdba
5.执行以下句子,将“bak_dir”指定为“/opt/oracle/bak_dir”。
复制代码代码如下:
createorreplacedirectorybak_diras'/opt/oracle/bak_dir'
commit
6.执行以下句子,将“bak_dir”的读、写和执行权限赋给xx(数据用户名)用户。
复制代码代码如下:
grantallondirectorybak_dirtoxx
commit
7.执行以下句子,退出oracle数据库服务器。
复制代码代码如下:
quit
执行以下句子,将sysdb用户的表备份到“bak_dir”目录下。
8.
复制代码代码如下:
expdpxx(要导入表所在的数据库用户名)/xx(密码)@数据库实例名directory=bak_dirdumpfile=expdb_xx.dmplogfile=expdb_xxlogtables=表名
Oracle数据还原:
1.在命令行输入:
复制代码代码如下:
sqlplus"/assysdba"
2.执行以下句子登陆xx数据库,用户名:xx,密码:xx(请输入当地实际密码)
connxx/xx;
3.假如恢复的表中有涉及到触发器的请停止触发器,例:A表
复制代码代码如下:
altertableAdisablealltriggers;
commit;
4.执行以下句子退出当前用户
quit;
5.执行以下句子,恢复用户数据。
复制代码代码如下:
impdpxx/xx@数据库实例名directory=bak_dirtable_exists_action=truncatedumpfile=expdb_xx.dmplogfile=impdb_xx.log
5.在命令行输入:sqlplus"/assysdba"
6.执行以下句子登陆xx数据库,用户名:xx,密码:xx(请输入当地实际密码)
connxx/xx;
7.执行以下句子打开被严禁的触发器
复制代码代码如下:
altertableAenablealltriggers;
commit;
里面方式是可以实现我们想要的,但但小型WEB服务器肯定是要手动定时进行备份的。
复制代码代码如下:
1.--创建数据表空间
2.createtablespacetest_data
3.logging
4.datafile'/u01/app/oradata/test/TEST.dbf'
5.size32m
6.autoextendon
7.next32mmaxsize2048m
8.extentmanagementlocal;
9.
10.--创建用户并指定表空间
11.createuserTESTidentifiedby123
12.defaulttablespacetest_data
13.temporarytablespacetemp;
14.
15.--给用户授予权限
16.grantconnect,resourcetoTEST;
用Test用户登入,创建一个表,并插入两条数据:
复制代码代码如下:
createtablet1(
Idvarchar(50)primarykey,
titlevarchar(50)
);
insertintot1values(sys_guid(),'t1');
insertintot1values(sys_guid(),'t2');
commit;
先写一个导入的脚本文件:
复制代码代码如下:
exportORACLE_BASE=/u01/app
exportORACLE_HOME=/u01/app/oracle
exportORACLE_SID=TEST
exportPATH=$ORACLE_HOME/bin:$PATH
d=$(date'+%Y%m%d')
expTEST/123@TESTfile=/home/oracle/backup/$d.dmplog=/home/oracle/backup/$d.logowner=TEST
zip-m/home/oracle/backup/$d.zip/home/oracle/backup/$d.dmp/home/oracle/backup/$d.log
前4句是设置环境变量,由于crontab定时调用时linux 备份oracle数据库,不会使用oracle用户的环境变量,所以要先把它们导进来。第6行以当前日期作为导入的文件名,比如20120626.dmp和20120626.log。第7行把这两个文件打成一个zip包,并删除这两个文件。
要用chmod命令把这个sh标记为可执行:
复制代码代码如下:
chmod+xbackup.sh
用oracle用户,输入crontab-e命令,编辑oracle用户的任务计划:
代码如下复制代码
1.[oracle@localhostbackup]$crontab-e
2.4213***/home/oracle/backup/backup.sh这样就添加了一个计划,在每晚的13点42分运行/home/oracle/backup/backup.sh。
这样就可以了,借助linux计划任务就实现了。
备份策略:
礼拜天0级
礼拜一,二,四,五,六2级
礼拜三1级
复制代码代码如下:
--创建本地管理路径
mkdir-p/dinglp/ora_managed/backup
mkdir-p/dinglp/ora_managed/backup
mkdir-p/dinglp/ora_managed/backup/export-
mkdir-p/dinglp/ora_managed/backup/log
mkdir-p/dinglp/ora_managed/backup/rman_backup
mkdir-p/dinglp/ora_managed/scripts
--创建rman表空间和rman用户
createtablespacerman_tbsdatafile'/oradata/luke/rman_tbs01.dbf'size1024M;
createuserrman_dlpidentifiedbydlpdefaulttablespacerman_tbstemporarytablespacetemp;
grantconnect,resource,recovery_catalog_ownertorman;
--注册catalog数据库
rmancatalogrman_dlp/dlp
createcatalogtablespacerman_tbs;
connecttargetsys/dg@priamry
registerdatabase;
reportschema;
--设置备份参数
configureretentionpolicytoredundancy2;
configureretentionpolicytorecoverywindowof7days;
--以下是备份脚本(可以通过vi进行编辑)
dlp->touchexp_rman.par
dlp->touchexp_rman.sh
dlp->touchrman_bk_LEVEL0.rcv(数据库0级备份)
dlp->touchrman_bk_LEVEL0.sh
dlp->touchrman_bk_LEVEL1.rcv(数据库1级备份)
dlp->touchrman_bk_LEVEL1.sh
dlp->touchrman_bk_LEVEL2.rcv(数据库2级备份)
dlp->touchrman_bk_LEVEL2.sh
--倒出RMAN用户数据脚本exp_rman.par
##################################################
###exp_rman.par###
##################################################
userid=rman_dlp/dlp
file=/dinglp/ora_managed/backup/export/rman.dmp
log=/dinglp/ora_managed/backup/log/rman.log
--倒出RMAN数据SHELL脚本exp_rman.sh
##################################################
###exp_rman.sh###
##################################################
#!/bin/bash
source/home/Oracle/.bash_profile
cd/dinglp/ora_managed/scripts
expparfile=exp_rman.par
--零级备份RMAN脚本rman_bk_LEVEL0.rcv
connectcatalogrman_dlp/dlp
connecttargetsys/dg@primary
run{
allocatechanneld1typedisk;
allocatechanneld2typedisk;
backupincrementallevel0databaseformat'/dinglp/ora_managed/backup/rman_backup/level0_%d_%s_%p_%u.bak'
tag='level0'includecurrentcontrolfile;
sql'altersystemarchivelogcurrent';
backuparchivelogallformat'/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak'deleteallinput;
releasechanneld2;
releasechanneld1;
crosscheckbackup;
deletenopromptexpiredbackup;
deletenopromptobsolete;
resynccatalog;
exit;
--零级备份SHELL脚本的rman_bk_LEVEL0.sh
#####################################################################
###rman_bk_LEVEL0.sh###
#####################################################################
#!/bin/bash
source/home/Oracle/.bash_profile
cd/dinglp/ora_managed/scripts
rmancmdfile=rman_bk_LEVEL0.rcvmsglog=$HOME/backup/log/rman_bk_LEVEL0.log
./dinglp/ora_managed/script/exp_rman.sh
--一级差别增量备份RMAN脚本rman_bk_LEVEL1.rcv
connectcatalogrman_dlp/dlp
connecttargetsys/dg@primary
run{
allocatechanneld1typedisk;
backupincrementallevel1format'/dinglp/ora_managed/backup/rman_backup/level1_%d_%s_%p_%u.bak'tag='level1'database;
sql'altersystemarchivelogcurrent';
backuparchivelogallformat'/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak'deleteallinput;
releasechanneld1;
crosscheckbackup;
deletenopromptexpiredbackup;
deletenopromptobsolete;
resynccatalog;
exit;
--一级差别增量备份SHELL脚本rman_bk_LEVEL1.sh
#####################################################################
###rman_bk_LEVEL1.sh###
#####################################################################
#!/bin/bash
source/home/Oracle/.bash_profile
cd/dinglp/ora_managed/scripts
rmancmdfile=rman_bk_LEVEL1.rcvmsglog=/dinglp/ora_managed/backup/log/rman_bk_LEVEL1.log
./dinglp/ora_managed/scripts/exp_rman.sh
--二级差别增量备份RMAN脚本rman_bk_LEVEL2.rcv
connectcatalogrman_dlp/dlp
connecttargetsys/dg@primary
run{
allocatechanneld1typedisk;
backupincrementallevel2format'/dinglp/ora_managed/backup/rman_backup/level2_%d_%s_%p_%u.bak'tag='level2'database;
sql'altersystemarchivelogcurrent';
backuparchivelogallformat'/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak'deleteallinput;
releasechanneld1;
crosscheckbackup;
deletenopromptexpiredbackup;
deletenopromptobsolete;
resynccatalog;
exit;
--二级差别增量备份SHELL脚本rman_bk_LEVEL2.sh
#####################################################################
###rman_bk_LEVEL2.sh###
#####################################################################
#!/bin/bash
source/home/Oracle/.bash_profile
cd/dinglp/ora_managed/scripts
rmancmdfile=rman_bk_LEVEL2.rcvmsglog=/dinglp/ora_managed/backup/log/rman_bk_LEVEL2.log
./dinglp/ora_managed/scripts/exp_rman.sh
--增强RMAN增量备份性能
alterdatabaseenableblockchangetrackingusingfile'/u01/app/Oracle/admin/devdb/bdump/luke.log';
descv$block_change_tracking;
--RMAN动态视图
V$ARCHIVED_LOG显示在数据库中早已创建、备份或消除的归档文件。
V$BACKUP_CORRUPTION显示在备份集的备份过程中找到的损坏块。
V$COPY_CORRUPTION显示映像复制过程中找到的损坏块。
V$BACKUP_DATAFILE用于通过确定各数据文件中的块数来创建大小相同的备份集。通过它也可以找出数据文件中已损毁的块数。V$BACKUP_REDOLOG显示在备份集中储存的归档日志。
V$BACKUP_SET显示早已创建的备份集。
V$BACKUP_PIECE显示为备份集创建的备份片。
--怎么监视复制进程
使用SETCOMMANDID命令可将服务器会话与通道联系上去。
查询V$PROCESS和V$SESSIONlinux系统应用,可以确定会话与什么RMAN通道对应。
查询V$SESSION_LONGOPS,可以监视备份和复制的进度。
--linux下手动运行备份脚本
crontab格式简介
第1列分钟1~59
第2列小时1~23(0表示子夜)
第3蒙斯1~31
第4列月1~12
第5列礼拜0~6(0表示礼拜天)
第6列要运行的命令
[root@dlp~]#vi/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#run-parts
01****rootrun-parts/etc/cron.hourly
024***rootrun-parts/etc/cron.daily
224**0rootrun-parts/etc/cron.weekly
4241**rootrun-parts/etc/cron.monthly
0022**0root/dinglp/ora_managed/scripts/rman_bk_LEVEL0.sh
0022**3root/dinglp/ora_managed/scripts/rman_bk_LEVEL1.sh
0022**1,2,4,5,6root/dinglp/ora_managed/scripts/rman_bk_LEVEL2.sh
1.1数据库数据全库备份
注:此操作须要启动数据库。
切换至oracle用户,在OS侧创建备份使用目录:
mkdir/oracle/backup
登陆oracle数据库,在数据库中创建备份使用目录
sqlplus/assysdba
createdirectorybackupdiras'/oracle/backup';
退出sqlplus后linux 内核,用oracle用户执行全库备份,备份文件生成在/oracle/backup下:
expdpsystem/System123DIRECTORY=backupdirDUMPFILE=backup201309XX.dmplogfile=backup.logfull=y
1.2数据库数据恢复
注:此操作须要启动数据库。
1、用orale用户登录数据库服务器
2、删除要恢复的用户.
sqlplus/assysdba
dropuserUSER_NAMEcascade;
exit
3、执行恢复命令
如下句子恢复pgm用户的数据到backup201309XX.dmp状态
impdpsystem/System123DIRECTORY=backupdirDUMPFILE=backup201309XX.dmpschemas=pgmTABLE_EXISTS_ACTION=TRUNCATElogfile=restore.log
数据库恢复时注意事项:
exp/imp形式备份恢复数据库未能对数据库定义(也就是表结构之类的)进行删掉和更改。
所以,假若在恢复时linux 备份oracle数据库,数据库表结构发生变化了,则须要将表结构恢复,或将表删掉,再执行恢复操作。假如搞不清楚什么表结构发生了变化,可以先将须要恢复的数据库用户删掉,之后再执行恢复操作。
另外,经过否认,删掉表后,再恢复该表,存在一个问题:删表的时侯,其他表创建的引用这个表的主键删除。
恢复的时侯,未能恢复该字段。此类情况须要恢复后自动创建字段约束。
droptableTABLE_NAMEcascadeconstraints;
impdpsystem/System123DIRECTORY=backupdirDUMPFILE=backup201309XX.dmptables=sdu.E_UC_ENTANNTABLE_EXISTS_ACTION=TRUNCATElogfile=restore_sdu.log