這篇文章主要介紹“怎么使用Oracle數據庫的邏輯備份工具”,在日常操作中,相信很多人在怎么使用Oracle數據庫的邏輯備份工具問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Oracle數據庫的邏輯備份工具”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
我們一直強調網站設計制作、成都網站建設對于企業的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網站建設公司,企業網站我們建議是要么不做,要么就做好,讓網站能真正成為企業發展過程中的有力推手。專業的建站公司不一定是大公司,創新互聯建站作為專業的網絡公司選擇我們就是放心。
Oracle數據庫可以通過數據泵expdp工具進行數據的導出、導入。在介紹工具使用之前,先說個注意事項,在Oracle11g之后新創建的表在沒有插入數據時,是不會分配segment的,也就是說不會分配空間,而使用expdp導出時,這類空表就不會被導出,導致數據庫結構不完整(此情況不包含原先有數據后來被清空的表)。因此為了不會遺漏數據,在導出時先對空表進行一次處理(手動分配空間):
1.通過user_tables查詢那些表時沒有數據的(注意:為了提高準確性,可以先對用戶下的所有表進行一次表分析analysis table),然后通過下面語句直接生成手動分配segment的語句:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
PS:當然以上語句會把原先有數據后被清空的表也查詢出來,但為了一個一個排除麻煩,就直接再從新分配一次segment。
2.批量執行生成的語句即可。
1.expdp工具導出的文件只能存放在數據庫服務器本地,是無法遠程導出到其他服務器的(exp工具導出通過本地遠程到數據庫服務器,將導出文件直接放到本地:),只能導出存放到數據庫服務器本地,然后才能傳到你想存放的備份服務器。
expdp工具使用需要在數據庫中創建directory映射到指定存放dmp文件的系統目錄:
# 創建dmp文件存放系統目錄(當然創建的目錄Oracle用戶要有權限讀寫):[oracle@local ~]$ mkdir /data/dmpfile # 使用sys用戶(或者有DBA權限的用戶)登錄數據庫[oracle@local ~]$ sqlplus / as sysdba # 查看當前實例是否是要進行用戶導出的實例名 SQL> select instance_name from v$instance; # 創建directory名稱為expdp,映射目錄是剛才創建的目錄/data/dmpfile SQL> create directory expdp as '/data/dmpfile'; # 將該目錄讀寫權限授予用戶或者直接授予public,表示所有用戶都可使用,不用每次不同用戶都授權一次。 SQL> Grant read,write on directory expdp to PUBLIC;# 推出數據庫 SQL> exit # 導出指定用戶數據進行備份[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log
2.impdp是數據泵的導入工具,要進行dmp文件導入時,需要將dmp文件放到執行導入操作的數據庫服務器上,dmp存放的目錄是導入directory映射的目錄,當然系統Oracle用戶要有讀寫權限:
# 在導入數據庫服務器上創建dmp文件存放系統目錄(當然創建的目錄Oracle用戶要有權限讀寫):[oracle@localhost ~]$ mkdir /data/dmpfile2[oracle@localhost ~]$ mv orcl_full20200216.dmp /data/dmpfile2 # 使用sys用戶(或者有DBA權限的用戶)登錄數據庫[oracle@localhost ~]$ sqlplus / as sysdba # 查看當前實例是否是要進行導入的數據庫 SQL> select instance_name from v$instance; # 創建directory名稱為expdp,映射目錄是剛才創建的目錄/data/dmpfile2 SQL> create directory expdp2 as '/data/dmpfile2'; # 將該目錄讀寫權限授予用戶或者直接授予public,表示所有用戶都可使用,不用每次不同用戶都授權一次。 SQL> Grant read,write on directory expdp2 to PUBLIC;# 推出數據庫 SQL> exit # 導出指定用戶數據進行備份[oracle@localhost ~]$ impdp username/userpassword directory=expdp2 dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log
1.expdp數據泵工具時向上兼容的,比如Oracle 11G使用expdp導出的dmp文件,可以直接導入Oracle 12C數據庫中,但是Oracle 12C導出的dmp文件是不能直接導入Oracle 11G中的。在expdp導出時導出語句還要加一個參數,比如Oracle 12C導出dmp文件導入Oracle 11G數據庫中,在導出語句后加上 VERSION=11.1.0.0.0.:
[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log VERSION=11.1.0.0.0
2.字符集要一致,數據庫字符集導入的數據庫要與導出的數據庫一致,保證數據正常導入。
查詢數據庫字符集的方法:
select userenv('language') from dual;
3.導出和導入前創建的存放dmp文件的目錄,oracle系統用戶必須有讀寫權限,為了避免此類錯誤,可記住一點,所有操作都在oracle系統用戶下操作,如果使用了root用戶來創建存放dmp文件的目錄,在創建后一定要進行屬主屬組修改授權,例如:
[root@local ~]# mkdir /data/dmpfile[root@local ~]# chown oracle:oinstall /data[root@local ~]# cd /data[root@local ~]# chown oracle:oinstall /dmpfile
注意:不要輕易使用chown -R /data/dmpfile的方式進行授權,如果/data目錄下有其他服務部署,此方法會導致/data下其他部署服務出現問題,為了防止這種錯誤,一步一步授權比較保險。
4.使用expdp進行數據遷移時,導入的數據庫要創建與導出數據庫相同表空間,尤其是一個表空間有多個數據文件的,必須要一致,防止導入時數據無法存入數據庫報錯。
5.從大數據量的庫中導出一部分數據時候,雖然導出的數據量很小,但是在導入的時候經常報錯表空間不足,原因是導出的數據中含有表空間的元數據(比如表占用的空間大小),
需要在導出的時加上compress 參數。
6.特殊的導出方式:
(1)按照查詢語句導出:
[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log QUERY=employees:"WHERE department_id > 10"
(2)指定表名或者指定多個表導出:
# 導出所有sys開頭的表[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log tables=(username.sys%)# 導出指定的多個表[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log tables=(BTRULES, CDRULES, CXRULES, DTBTRULES, HLXRULES)
(3)規定dmp大小方式導出:
# 每個dmp大小為2G[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=full_xzxt_%U.dmp filesize=2G loggile=orcl_full20200216.log
(4)只導出表結構
[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log content=metadata_only
(5)只導出表結構
[oracle@local ~]$ expdp username/userpassword directory=expdp dumpfile=orcl_full20200216.dmp loggile=orcl_full20200216.log content=data_only
(6)導入不同用戶,導出用戶為scott,導入用戶為zhang:
[oracle@local ~]$ impdp zhang/zhang directory=expdp dumpfile=scott.dmp logfile=scott.log schemas=scott remap_schema=scott:zhang
到此,關于“怎么使用Oracle數據庫的邏輯備份工具”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!