備份&恢復系列之一:怎樣在linux中寫對oracle的冷備份指令碼!

mengzhaoliang發表於2008-02-04
 在www.itpub.net上看到piner的Oracle備份&恢復案例,寫得非常好!因為有很具體的步驟,就在自己的資料庫中測試了一下:

測試環境:
1      作業系統:Redhat Linux 5
[oracle@mzl proc]$ cat /proc/version
Linux version 2.6.18-8.el5 (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:15:21 EST 2007

2     資料庫版本:Oracle10g
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

3     資料庫的名字:orcl
SQL> show parameter db_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      orcl

4    資料庫的所有資料檔案所在位置
SQL> select file#,status,enabled,name from v$datafile;

     FILE# STATUS  ENABLED    NAME
---------- ------- ---------- ------------------------------------------
         1 SYSTEM  READ WRITE /u01/app/oracle/oradata/orcl/system01.dbf
         2 ONLINE  READ WRITE /u01/app/oracle/oradata/orcl/undotbs01.dbf
         3 ONLINE  READ WRITE /u01/app/oracle/oradata/orcl/sysaux01.dbf
         4 ONLINE  READ WRITE /u01/app/oracle/oradata/orcl/users01.dbf
         5 ONLINE  READ WRITE /u01/app/oracle/oradata/orcl/example01.dbf

5   控制檔案的所在位置
SQL> select * from v$controlfile;

STATUS  NAME                                       IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------------------------ --- ---------- --------------
        /u01/app/oracle/oradata/orcl/control01.ctl NO       16384            430
        /u01/app/oracle/oradata/orcl/control02.ctl NO       16384            430
        /u01/app/oracle/oradata/orcl/control03.ctl NO       16384            430

6    重做日誌檔案位置
SQL> col member format a45
SQL> l
  1* select * from v$logfile
SQL> /

    GROUP# STATUS  TYPE    MEMBER                                        IS_
---------- ------- ------- --------------------------------------------- ---
         3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log       NO
         2 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo02.log       NO
         1 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo01.log       NO

7      我在/home/mzl/BackupDatabase/目錄下寫個coldbak.sql指令碼
 [oracle@mzl proc]$ vi /home/mzl/BackupDatabase/coldbak.sql
指令碼內容如下:
#rem script.:coldbak.sql
#rem creater:mengzhaoliang
#rem data:2008/2/4
#rem desc:offline full backup database
#enter database
$ORACLE_HOME/bin/sqlplus "/as sysdba" <#--shutdown database
shutdown immediate
#--Copy Data file
!cp /u01/app/oracle/oradata/orcl/*.dbf /home/mzl/BackupDatabase/
#--Copy Control file
!cp /u01/app/oracle/oradata/orcl/*.ctl /home/mzl/BackupDatabase/
--Copy Log file
!cp /u01/app/oracle/oradata/orcl/*.log /home/mzl/BackupDatabase/
#--startup database
startup


8      在linux啟動一個終端執行該coldbak.sql指令碼
[oracle@mzl BackupDatabase]$ ./coldbak.sql

        冷備份完畢!


附上piner的說明:
說明:
1、以上指令碼在資料庫關閉狀態下備份資料庫所有的資料檔案,聯機日誌,控制檔案(在一個目錄下),如果成功備份,所有檔案是一致的。
2、沒有備份引數檔案,引數檔案可以另外備份,沒有必要每次都備份,只需要在改變設定後備份一次。
3、如果以上命令沒有成功依次執行,那麼備份將是無效的,如連線資料庫不成功,那麼肯定關閉資料庫也不成功,那麼備份則無效
4、冷備份建議下人工干預下執行。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-168310/,如需轉載,請註明出處,否則將追究法律責任。

相關文章