天天看點

資料庫備份

SQL> shutdown immediate

SQL> startup mount

檢視歸檔模式

SQL> archive log list

設定為歸檔模式

SQL> alter database archivelog;

SQL> alter database open;

檢視歸檔程序

[oracle@sq ~]$ ps -ef |grep arc

檢視歸檔路徑

SQL> show parameter DB_RECOVERY_FILE_DEST

SQL> alter system switch logfile;

(切換日志時會産生歸檔檔案,進入歸檔路徑下檢視)

--------------------------------------------

更改歸檔日志目錄

SQL> alter system set log_archive_dest_1='location=/home/oracle/archivelog01' scope=both;

SQL> alter system set log_archive_dest_2='location=/home/oracle/archivelog02' scope=both;

系統cpu ,i/o 資源充足情況下,增加歸檔程序提高性能.

檢視參數 (一共有10個程序,看情況自行增加)

SQL> show parameter archive

歸檔路徑中 日志格式為dbf,改變格式

SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

%s: 日志序列号:

                %S: 日志序列号(帶有前導)

                %t: 重做線程編号.

                %T: 重做線程編号(帶有前導)

                %a: 活動ID号

                %d: 資料庫ID号

                %r RESETLOGS的ID值.

SQL> startup force

(檢視歸檔路徑變為arc字尾)

==============================================

完全資料庫脫機冷備份

拷貝出控制檔案,資料檔案,日志檔案

[oracle@sq ~]$ mkdir db_bak

SQL> select 'cp '||member||' /home/oracle/db_bak' from v$logfile t

  2  union all

  3  select 'cp '||file_name||' /home/oracle/db_bak' from dba_data_files

  4  union all

  5  select 'cp '||name||' /home/oracle/db_bak' from v$controlfile;

(生成拷貝指令,把生成的指令都執行一邊)

==================================================

部分資料庫聯機備份

備份表空間

(檢視表空間)

SQL> select TABLESPACE_NAME from dba_tablespaces;

1.SQL>  alter tablespace users begin backup;

[oracle@sq ~]$ cp /u01/app/oracle/oradata/orcl/users01.dbf /home/oracle/db_bak1

2.備份完畢後結束

SQL> alter tablespace users end backup;

3.

[oracle@sq orcl]$ rm -rf users01.dbf 

4.SQL> startup force;

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

5.把備份的檔案拷貝回來

[oracle@sq db_bak1]$ cp users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf

6.離線檔案

SQL> alter database datafile 4 offline;

7.恢複檔案

SQL> recover datafile 4;

SQL> alter database datafile 4 online;

8.SQL> alter database open;

檢視狀态

SQL> select FILE_NAME,FILE_ID,STATUS from dba_data_files

檢視備份

SQL> select * from v$backup;

=====================================================

全庫聯機備份

1.整庫聲明備份

SQL> alter database begin backup;

結果所有檔案 都是備份狀态

2.把資料檔案拷貝出來

[oracle@sq ~]$ mkdir db_bak2

[oracle@sq orcl]$ cp *.dbf /home/oracle/db_bak2/

3.控制檔案也可能損害,如何把控制檔案也備份出來呢

SQL> oradebug setmypid;

SQL> alter database backup controlfile to trace;

SQL> oradebug tracefile_name;

/u01/app/oracle/admin/orcl/udump/orcl_ora_11743.trc

裡面有建立控制檔案指令

CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/oracle/app/oradata/TEST/redo01.log'  SIZE 50M,

  GROUP 2 '/oracle/app/oradata/TEST/redo02.log'  SIZE 50M,

  GROUP 3 '/oracle/app/oradata/TEST/redo03.log'  SIZE 50M

-- STANDBY LOGFILE

DATAFILE

  '/oracle/app/oradata/TEST/system01.dbf',

  '/oracle/app/oradata/TEST/undotbs01.dbf',

  '/oracle/app/oradata/TEST/sysaux01.dbf',

  '/oracle/app/oradata/TEST/users01.dbf'

CHARACTER SET AL32UTF8

;

(reuse是建表空間時重新使用已存在的檔案,如未指定reuse,那麼如果要建的檔案已存在,則會報錯。

noresetlogs 恢複的時候,把原來redo裡的資訊不更新,即新的資料庫的SCN号和原來的SCN号是連續的,這個一般用于完全恢複

resetlogs就是會把redo裡原來的資訊會重置,相當于一個新的資料庫的建立)

4.删除

[oracle@sq orcl]$ rm -rf 控制檔案

5.SQL> startup force;

ORA-00205: error in identifying control file, check alert log for more info

6.執行上面的建立控制檔案指令

7.

SQL> alter database open;(報錯)

8.SQL> recover database;

SQL> alter database open;(成功)

========================================

==========================================

備份日志檔案的高可靠(日志鏡像)

SQL> show parameter archive(檢視備份日志通道)

[oracle@sq ~]$ mkdir archivelog1

[oracle@sq ~]$ mkdir archivelog2

SQL> alter system set log_archive_dest_1='location=/home/oracle/archivelog1';

SQL> alter system set log_archive_dest_2='location=/home/oracle/archivelog2';

SQL> alter system switch logfile;(切換日志)

進入 archivelog1 archivelog2目錄會看到 2個一樣的檔案

[oracle@sq archivelog1]$ ps -ef |grep ora_(兩個歸檔程序)

oracle   19962     1  0 06:28 ?        00:00:00 ora_arc0_orcl

oracle   19964     1  0 06:28 ?        00:00:00 ora_arc1_orcl

SQL> show parameter archive (兩個程序)

log_archive_max_processes            integer     2

SQL> alter system set log_archive_max_processes=3;(改變程序數)

[oracle@sq archivelog1]$ ps -ef |grep ora_(結果3個)

SQL> alter system set log_archive_dest_2='';(清除通道)

===========================

     本文轉自陳繼松 51CTO部落格,原文連結:http://blog.51cto.com/chenjisong/1737390,如需轉載請自行聯系原作者