程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE數據庫備份技術

ORACLE數據庫備份技術

編輯:Oracle數據庫基礎

1 引言

ORACLE 數據庫是一種大型關系型的數據庫,可以存貯達到存貯 TB 的數據,那麼如何保證這些數據的安全尤其至關重要,我們從 1991 年開始使用 ORACLE 數據庫,通過這些年的使用,我們制定了一整套的 Oracle 數據庫的備份制度。現在把我們的備份制度介紹給大家,供大家參考。

2 根據實際需要決定數據庫的運行方式

Oracle 數據庫有兩種運行方式:一是歸檔方式( ARCHIVELOG ),歸檔方式的目的是當數據庫發生故障時最大限度恢復所有已提交的事物;二是不歸檔方式 (NOARCHIVELOG) ,恢復數據庫到最近的回收點。我們根據數據庫的高可用性和用戶可承受丟失的工作量的多少,把我們正式運行的數據庫采用為歸檔方式;那些正在開發和調試的數據庫采用不歸檔方式。

3 如何改變數據庫的運行方式

3.1 在創建數據庫時設置數據庫的運行的方式

在創建數據庫時,作為創建數據庫的一部分,就決定了數據庫初始的存檔方式。一般情況下為 NOARCHIVELOG 方式。當數據庫創建好以後,根據我們的需要把需要運行在歸檔方式的數據庫改成 ARCHIVELOG 方式。

3.2 改變不歸檔方式為為歸檔方式

關閉數據庫,備份已有的數據。改變數據庫的運行方式是對數據庫的重要改動,所以要對數據庫做備份,對可能出現的問題作出保護。

啟動 Instance ,Mount 數據庫但不打開數據庫,來改變歸檔方式

sqldba lmode=y ( svrmgrl )
sqldba>connect internal
sqldba>startup mount
sqldba>alter database archivelog;

使能自動存檔

在初始化文件 init*.ora( 一般放 Oracle 根目錄的下層目錄 dbs 下 ) 加參數:

log_archive_start=true

指定存檔的重做登錄文件名和存放的位置

同樣是在初始化文件 init*.ora 中加入下面的參數:

log_archive_format=%S.arc

log_archive_dest=/arch12/arch (arch12 是日志文件存放的目錄 )

關閉數據庫,重新啟動數據庫,歸檔方式轉換完成.

4 回收制度

4. 1 根據數據庫的運行方式和可承受丟失的工作量來決定數據庫的回收制度對於不歸檔方式,我們用的是 Oracle 數據庫的邏輯備份 Export ,回收的制度是:一個月作一次全備份 (x01.dmp) ,一周作一次累積備份 (c*.dmp) ,一天一次增量備份 (I*.dmp) ,具體的是星期一到星期五作增量備份,星期六做累積備份或全備份,每次做完備份後自動傳到其它的機器上存儲。這些備份都是自動執行的 , 後面給出程序文本。

對於歸檔方式,我們用的是 ORCALE 的物理備份:當數據庫創建好以後,做一次物理上的全備份,平時在不關閉數據庫的前提下,一個星期對經常改變的數據文件做聯機的數據庫數據文件的物理備份;當數據庫的結構發生改變,如:增加表空間,加數據文件等,如允許關機,正常關閉數據庫,重新做數據庫全備份,否則,備份控制文件,備份數據文件照常。聯機的日志文件我們是寫在陣列上的,不用鏡象和備份。

4.2 回收的方法

4.2.1 不歸檔方式

我們拿曙光 AIX 操作系統為例 , 來講解以下如何做自動備份:

a. 首先建 UNIX 用戶 demo/demo

b. 拷貝 Oracle 用戶下的 .profile 到 demo 用戶下,以保證 demo 用戶可以用 Export 命令

c. 用 root 用戶登錄,編輯 /var/adm/cron/cron.allow 加入用戶名 demo, 這樣 demo 用戶就有權自動執行數據庫備份的 shell 程序;

d. 創建數據庫備份程序,放到本用戶的下層目錄 bin 下,並且這些文件要有可執行權文件 zlbf1:( 增量備份 1 ,星期一執行的程序 )

. /u11/demo/.profile
exp system/manager inctype=INCREMENTAL file=i01.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put i01.dmp
close
bye
!

文件 zlbf2:( 增量備份 2, 星期二執行的程序 )

. /u11/demo/.profile
exp system/manager inctype=INCREMENTAL file=i02.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put i02.dmp
close
bye
!

文件 zlbf3:( 增量備份 3, 星期三執行的程序 )

. /u11/demo/.profile
exp system/manager inctype=INCREMENTAL file=i03.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put i03.dmp
close
bye
!

文件 zlbf4:( 增量備份 4, 星期四執行的程序 )

. /u11/demo/.profile
exp system/manager inctype=INCREMENTAL file=i04.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put i04.dmp
close
bye
!

文件 zlbf5:( 增量備份 5, 星期五執行的程序 )

. /u11/demo/.profile
exp system/manager inctype=INCREMENTAL file=i05.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put i05.dmp
close
bye
!

文件 zlbf6:( 增量備份 6, 星期六執行的程序 )

. /u11/demo/.profile
JS=`ls c*.dmp|wc -l`
if test $JS = 0
then
exp system/manager inctype=CUMULATIVE file=c01.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put c01.dmp
close
bye
!
fi
if test $JS = 1
then
exp system/manger inctype=CUMULATIVE file=c02.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put c02.dmp
close
bye
!
fi
if test $JS = 2
then
exp system/maneger inctype=CUMULATIVE file=c03.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put c03.dmp
close
bye
!
fi
if test $JS = 3
then
exp system/manager inctype=COMPLETE file=x01.dmp
FTP -n< < !
open 10.10.10.40
user demo demo
binary
prompt
cd backup40
put x01.dmp
close
bye
!
rm c*.dmp
fi

e. 在 demo 用戶下建一個文件,假如叫 :cron.demo, 文件內容如下

59 22 * * 1 bin/zlbf1
59 22 * * 2 bin/zlbf2
59 22 * * 3 bin/zlbf3
59 22 * * 4 bin/zlbf4
59 22 * * 5 bin/zlbf5
59 22 * * 6 bin/zlbf6

f. 在 demo 用戶下執行下面的命令:

crontab cron.demo 執行的結果放到

/var/spool/cron/crontabs/demo 文件裡

g. 重新啟動 cron 進程,命令: kill -1 進程號。

h. 執行結果放在本用戶的郵件裡

4.2.2 歸檔方式

a. 找到要回收的數據文件、聯機重做登錄文件、控制文件和參數文件

b. 正常關閉數據庫,作一次全回收 ( 用操作系統的 TAR 命令,可以寫成 shell 程序 ) ,然後打開數據庫供正常使用 ,shell 程序如下:

tar cvf /dev/rmt/ctape2 /u1/Oracle/dbs/ctrl1ora7.ctl
/u1/Oracle/dbs/ctrl2ora7.ctl
/u1/Oracle/dbs/ctrl3ora7.ctl
/u1/Oracle/dbs/systora7.dbf
/u1/Oracle/dbs/rbsora7.dbf
/u1/Oracle/dbs/tempora7.dbf
/u1/Oracle/dbs/toolora7.dbf
/u1/Oracle/dbs/usrora7.dbf
/ls1/ls1.dbf
/u1/Oracle/dbs/log1ora7.dbf
/u1/Oracle/dbs/log2ora7.dbf
/u1/Oracle/dbs/log3ora7.dbf

a. 經常作聯機的表空間和數據文件的部分回收

首先標記聯機表空間回收的開始

alter tablespace 表空間名 begin backup;

用操作系統命令備份數據文件

最後標記聯機的表空間回收結束

alter tablespace 表空間名 end backup

多個表空間可以一起做標記,備份做標記的所有數據文件後,一起標記結束。

d. 當數據庫結構發生改變後,要對它的控制文件做回收

sqldba >alter database backup
controlfile to ' 文件名 ' reuse;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved