Oracle 備份與還原


oracle 備份與還原

一、備份數據庫(exp)

1、完全備份

exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y

demo:用戶名、密碼 

buffer: 緩存大小

file: 具體的備份文件地址 

full: 是否導出全部文件 

ignore: 忽略錯誤,如果表已經存在,則也是覆蓋 

2、將數據庫中system用戶與sys用戶的表導出 

exp demo/demo@orcl file=d:\backup\1.dmp owner=(system,sys)

 3、導出指定的表 

exp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)

 4、按過濾條件,導出 

exp demo/demo@orcl file=d:\back.dmp tables=(table1) query=\" where filed1 like 'fg%'\"

 導出時可以進行壓縮: 

命令后面 加上 compress=y   

如果需要日志,后面: log=d:\log.txt

 

5、備份遠程服務器的數據庫

exp 用戶名/密碼@遠程的IP:端口/實例 file=存放的位置:\文件名稱.dmp full=y

 

二、還原數據庫

打開cmd直接執行如下命令,不用再登陸sqlplus。

1、完整還原

imp demo/demo@orcl file=d:\back.dmp full=y ignore=y log=D:\implog.txt

指定log很重要,便於分析錯誤進行補救。

2、導入指定表:

imp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)

3、還原到遠程服務器

imp 用戶名/密碼@遠程的IP:端口/實例 file=存放的位置\文件名稱.dmp full=y 

 

三、解決11G后,空表無法導出的問題

11G中有個新特性,當表無數據時,不分配segment,以節省空間。這樣在導出數據的時候,空表不被導出

解決方法:

1、insert一行,再rollback就產生segment了。

  該方法是在在空表中插入數據,再刪除,則產生segment。導出時則可導出空表。

2、設置deferred_segment_creation 參數

該參數值默認是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。

需注意的是:該值設置后對以前導入的空表不產生作用,仍不能導出,只能對后面新增的表產生作用。如需導出之前的空表,只能用第一種方法。

需要查詢所有的空表,然后執行

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

然后再導出即可。

 

四、導入數據時遇到 ORACLE 錯誤 959,表空間 'xxx' 不存在

IMP-00003: 遇到 ORACLE 錯誤 959
ORA-00959: 表空間 'xxx' 不存在 IMP-00017: 由於 ORACLE 錯誤 959, 以下語句失敗:

解決方案:

1、導入前,先創建表空間

(創建目錄即為oracle的數據目錄)

create tablespace xxx datafile 'D:\oracle\data\xxx.dbf' size 100M autoextend on;

2、指定用戶該表空間不受限

alter user demo quota unlimited on xxx;//后面的xxx是表空間名

3、然后再imp即可

注意導入時一定要指定log,便於分析解決

成功提示是這樣的:

成功終止導入,沒有出現警告

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM