c++ 操作oracle 最佳方式_oracle备份恢复基础详解
一、Oracle備份方式分類:
Oracle有兩類備份方式:
(1)物理備份:是將實際組成數據庫的操作系統文件從一處拷貝到另一處的備份過程,通常是從磁盤到磁帶。
物理備份又分為冷備份、熱備份;
(2)邏輯備份:是利用SQL語言從數據庫中抽取數據并存于二進制文件的過程。
邏輯備份使用導入導出工具:EXPDP/IMPDP或EXP/IMP;
備份方式的優缺點及使用時機比較如下圖:
二、Oracle備份方式介紹:
1、物理備份之冷備份(條件-NonArchiveLog):
當數據庫可以暫時處于關閉狀態時,我們需要將它在這一穩定時刻的數據相關文件轉移到安全的區域,當數據庫遭到破壞,再從安全區域將備份的數據庫相關文件拷貝回原來的位置,這樣,就完成了一次快捷安全等數據轉移。由于是在數據庫不提供服務的關閉狀態,所以稱為冷備份。冷備份具有很多優良特性,比如上面圖中我們提到的,快速,方便,以及高效。一次完整的冷備份步驟應該是:
(1)首先關閉數據庫(shutdown normal)
(2)拷貝相關文件到安全區域(利用操作系統命令拷貝數據庫的所有的數據文件、日志文件、控制文件、參數文件、口令文件等(包括路徑))
(3)重新啟動數據庫(startup)
物理冷備份的恢復:
恢復的時候,相對比較簡單了,我們停掉數據庫,將文件拷貝回相應位置,重啟數據庫就可以了,當然也可以用腳本來完成。
2、物理備份之熱備份:(條件-ArchiveLog)
當我們需要做一個精度比較高的備份,而且我們的數據庫不可能停掉(少許訪問量)時,這個情況下,我們就需要歸檔方式下的備份,就是下面討論的熱備份。熱備份可以非常精確的備份表空間級和用戶級的數據,由于它是根據歸檔日志的時間軸來備份恢復的,理論上可以恢復到前一個操作,甚至就是前一秒的操作。具體步驟如下:
(1)通過視圖v$database,查看數據庫是否在Archive模式下:
SQL> select log_mode from v$database; 如果不是Archive模式,則設定數據庫運行于歸檔模式下: SQL>shutdown immediate SQL>startup mount SQL>alter database archivelog; SQL>alter database open;如果Automaticarchival顯示為“Enabled”,則數據庫歸檔方式為自動歸檔。否則需要手工歸檔,或者將歸檔方式修改為自動歸檔,如:
正常shutdown數據庫,在參數文件中init.ora中加入如下參數
SQL>shutdown immediate 修改init.ora: LOG_ARCHIVE_START=TRUE LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(歸檔日志存放位置可以自己定義) SQL>startup然后,重新啟動數據庫,此時Oracle數據庫將以自動歸檔的方式工作在Archive模式下。其中參數LOG_ARCHIVE_DEST1是指定的歸檔日志文件的路徑,建議與Oracle數據庫文件存在不同的硬盤,一方面減少磁盤I/O競爭,另外一方面也可以避免數據庫文件所在硬盤毀壞之后的文件丟失。歸檔路徑也可以直接指定為磁帶等其它物理存儲設備,但可能要考慮讀寫速度、可寫條件和性能等因素。
(2)表空間文件備份步驟:
a,首先,修改表空間文件為備份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;
b,然后,拷貝表空間文件到安全區域 !CP tablespace_name D_PATH;
c,最后,將表空間的備份模式關閉 ALTER TABLESPACE tablespace_name END BACKUP;
(3)歸檔日志文件備份步驟:
停止歸檔進程-->備份歸檔日志文件-->啟動歸檔進程
如果日志文檔比較多,我們將它們寫入一個文件成為一個恢復的參考:$ files `ls /arch*.dbf`;export files
(4)控制文件備份步驟:
SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
物理熱備份的恢復:
熱備份的恢復,對于歸檔方式數據庫的恢復要求不但有有效的日志備份還要求有一個在歸檔方式下作的有效的全庫備份。歸檔備份在理論上可以無數據丟失,但是對于硬件以及操作人員的要求都比較高。在我們使用歸檔方式備份的時候,全庫物理備份也是非常重要的。歸檔方式下數據庫的恢復要求從全備份到失敗點所有的日志都要完好無缺。
恢復步驟:LOG_ARCHIVE_DEST_1
(1)shutdown數據庫。
(2)將全備份的數據文件放到原來系統的目錄中。
(3)將全備份到失敗點的所有歸檔日志放到參數LOG_ARCHIVE_DEST_1所指定的位置。
(4)利用sqlplus登陸到空實例。(connect / as sysdba)
startup mount set autorecovery on recover database; alter database open;3、邏輯備份之EXP/IMP:
EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用于EXP導出的文件,不適用于EXPDP導出文件;IMPDP只適用于EXPDP導出的文件,而不適用于EXP導出文件。
(1)導出表:
E:>exp system/oracle TABLES=scott.dept,scott.emp FILE=a.dmp
(2)導出方案:
E:>exp system/oracle OWNER=scott FILE=b.dmp
(3)導出數據庫:
E:>exp system/oracle FILE=c.dmp FULL=Y
(4)導入表:
SQL> drop table scott.emp;
SQL> drop table scott.dept;
E:>impdp scott/tiger file=a.dmp tables=dept,emp
(5)導入方案:
SQL> drop user scott cascade;
SQL> create user scott identified by tiger;
SQL> grant dba to scott;
E:>impdp scott/tiger file=b.dmp
E:>impdp system/oracle file=b.dmp owner=scott
(6)導入數據庫:
impdp system/oracle file=c.dmp full=y
4、邏輯備份之EXPDP/IMPDP
使用數據泵(Data Dump)導出/導入包括4種方式:導出表、導出方案、導出表空間、導出數據庫。
(1)導出表
在E盤建立目錄oracledump;
SQL> CREATE DIRECTORY dump_dir AS 'E:oracledump';SQL> GRANT READ,WRITE ON DIRECTORY dump_dir TO scott;E:>expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp(2)導出方案:
E:>expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schemaScott.dmp SCHEMAS='SCOTT';(3)導出表空間:
E:>expdp system/oracle directory=dump_dir dumpfile=tablespaceUsers.dmp ESTIMATE_ONLY(4)導出數據庫:
E:>expdp system/oracle directory=dump_dir dumpfile=database.dmp FULL=Y(5)導入表:
SQL> drop table scott.emp;SQL> drop table scott.dept;E:>impdp scott/tiger directory=dump_dir dumpfile=tab.dmp tables=dept,emp(6)導入方案:
SQL> drop user scott cascade;SQL> create user scott identified by tiger;SQL> grant dba to scott;E:>impdp system/oracle directory=dump_dir dumpfile=schemaScott.dmp schemas=scott(7)導入表空間:
impdp system/oracle directory=dump_dir dumpfile=tablespaceUsers.dmp tablespaces=users(8)導入數據庫:
impdp system/oracle directory=dump_dir dumpfile=database.dmp FULL=Y后面會分享更多DBA備份恢復方面的內容,感興趣的朋友可以關注下!!
總結
以上是生活随笔為你收集整理的c++ 操作oracle 最佳方式_oracle备份恢复基础详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:求多边形的面积 算法几何
- 下一篇: 项目后台的最新认识和对MVC封装性、可维