oracle導出導入數據庫

  • 一.給空表分配空間:

這一步必定要作,不然空表不能導出.sql

首先鏈接你要導出的庫,在該庫上執行如下sql:數據庫

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

執行結果是一連串的sql語句,相似alter table tablename allocate extent;選擇全部結果,複製,在庫裏統一執行一下.oracle

我在網上看好多人要在後面加一句 where num_rows = 0,意思我懂,就是隻對數據條數爲0的表生成要執行的sql語句,可是這樣彷佛仍然會有漏的表,我使用spa

select table_name,num_rows from  user_tables 在庫裏執行一下發現num_rows的值有的爲null,不是0,反正看須要選擇加不加吧日誌

固然後面不加where條件的話,就把全部的表都設置了一遍,事實上有數據的表時不須要設置的,若是不想這樣,就加個where num_rows = 0  or num_rows is null,這樣應該就沒有遺漏的表了.code

  • 二.導出dmp文件

在cmd中執行一下命令導出dmp文件:blog

exp 用戶名/密碼@監聽名 file=E:\數據庫名.dmp owner=(用戶名) log=E:\日誌名.log indexes=n statistics=none      

 這裏加了owner表示將該用戶下全部表導出cmd

注意@後的監聽名,通常你的oracle安裝目錄下有個tnsnames.ora文件,玩過pl/sql應該知道,常常要改它的,在這個文件加入監聽配置io

 通過一段時間後控制檯會提示導出成功,取決於數據庫大小.table

  • 三.建立表空間
  • 1.先查看以往數據庫對應的文件路徑在哪裏:

SELECT t1.name, t2.name FROM v$tablespace t1, v$datafile t2 WHERE t1.ts#=t2.ts# order by t1.name;

注意在本地執行該命令的用戶需擁有dba權限,不然會提示該表不存在,能夠登陸sqlplus,使用 conn / as sysdba登陸,而後GRANT "DBA" TO 用戶; 或者直接在sysdba中執行該sql,查看結果.

  • 2.建立表空間
create tablespace mytisjs  
 
datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\mytisjs.dbf' (mytisjs.dbf前面的路徑爲你以前查詢出來的路徑,其實這裏路徑能夠寫任何位置,只是和以前的數據庫統一存放在同一位置比較好)
 
size 2000m  
 
autoextend on  
 
next 500m maxsize 10096m  
 
extent management local; 
  •  3.建立臨時表空間
create temporary tablespace mytisjs_temp  
 
tempfile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\mytisjs_temp.dbf' 
 
size 500m  
 
autoextend on  
 
next 500m maxsize 2048m  
 
extent management local;
  • 4.建立用戶
CREATE USER test IDENTIFIED BY test
DEFAULT TABLESPACE "MYTISJS"   (指定表空間爲剛剛建立的表空間,注意表空間名稱要大寫)
TEMPORARY TABLESPACE "MYTISJS_TEMP";
  • 5.授予權限
GRANT "DBA" TO test; 
GRANT "CONNECT" TO test; 
GRANT "RESOURCE" TO test; 
  • 四.導入dmp文件

用imp命令導入

imp test/test@mytisjs file=E:\tisjs.dmp log=E:\tisjs.log full=y ignore=y

其中test/test是用戶名/密碼 mytisjs和以前同樣,在tnsnames.ora文件加入對應的配置,若是我要導入本地,就HOST就爲localhost,file後的路徑就是你以前導出的dmp文件路徑,log也同樣.

等一段時間就會提示導入成功,數據庫就可使用了.

若是dmp文件在本地,導入到本地數據庫,直接imp test/test file=E:\tisjs.dmp log=E:\tisjs.log full=y ignore=y就能夠了,不用配置監聽也能夠

 

 

  • 五.表空間相關說明:

 

  • 1.查看數據庫的表空間,包括臨時表空間
    select * from (  
    Select a.tablespace_name,  
    to_char(a.bytes/1024/1024,'99,999.999') total_bytes,  
    to_char(b.bytes/1024/1024,'99,999.999') free_bytes,  
    to_char(a.bytes/1024/1024 - b.bytes/1024/1024,'99,999.999') use_bytes,  
    to_char((1 - b.bytes/a.bytes)*100,'99.99') || '%' use  
    from (select tablespace_name,  
    sum(bytes) bytes  
    from dba_data_files  
    group by tablespace_name) a,  
    (select tablespace_name,  
    sum(bytes) bytes  
    from dba_free_space  
    group by tablespace_name) b  
    where a.tablespace_name = b.tablespace_name  
    union all  
    select c.tablespace_name,  
    to_char(c.bytes/1024/1024,'99,999.999') total_bytes,  
    to_char( (c.bytes-d.bytes_used)/1024/1024,'99,999.999') free_bytes,  
    to_char(d.bytes_used/1024/1024,'99,999.999') use_bytes,  
    to_char(d.bytes_used*100/c.bytes,'99.99') || '%' use  
    from  
    (select tablespace_name,sum(bytes) bytes  
    from dba_temp_files group by tablespace_name) c,  
    (select tablespace_name,sum(bytes_cached) bytes_used  
    from v$temp_extent_pool group by tablespace_name) d  
    where c.tablespace_name = d.tablespace_name  
    ) 

 

  • 2. 查看當前用戶的使用的表空間及默認表空間,若是結果太多能夠本身添加where條件過濾到當前用戶
select username,default_tablespace,temporary_tablespace
from dba_users

 

  • 3.臨時表空間滿了查詢可能會報錯,執行以下命令收縮臨時表空間
ALTER TABLESPACE MYTISJS_TEMP SHRINK SPACE

其中MYTISJS_TEMP爲要收縮的臨時表空間名

 

  • 4.刪除用戶及表空間
DROP USER TISJS5 CASCADE;
drop tablespace MYTISJS5 including contents and datafiles;
drop tablespace MYTISJS5_TEMP including contents and datafiles;
相關文章
相關標籤/搜索