這一步必定要作,不然空表不能導出.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
在cmd中執行一下命令導出dmp文件:blog
exp 用戶名/密碼@監聽名 file=E:\數據庫名.dmp owner=(用戶名) log=E:\日誌名.log indexes=n statistics=none
這裏加了owner表示將該用戶下全部表導出cmd
注意@後的監聽名,通常你的oracle安裝目錄下有個tnsnames.ora文件,玩過pl/sql應該知道,常常要改它的,在這個文件加入監聽配置io
通過一段時間後控制檯會提示導出成功,取決於數據庫大小.table
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,查看結果.
create tablespace mytisjs datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\mytisjs.dbf' (mytisjs.dbf前面的路徑爲你以前查詢出來的路徑,其實這裏路徑能夠寫任何位置,只是和以前的數據庫統一存放在同一位置比較好) size 2000m autoextend on next 500m maxsize 10096m extent management local;
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;
CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE "MYTISJS" (指定表空間爲剛剛建立的表空間,注意表空間名稱要大寫) TEMPORARY TABLESPACE "MYTISJS_TEMP";
GRANT "DBA" TO test; GRANT "CONNECT" TO test; GRANT "RESOURCE" TO test;
用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就能夠了,不用配置監聽也能夠
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 )
select username,default_tablespace,temporary_tablespace from dba_users
ALTER TABLESPACE MYTISJS_TEMP SHRINK SPACE
其中MYTISJS_TEMP爲要收縮的臨時表空間名
DROP USER TISJS5 CASCADE; drop tablespace MYTISJS5 including contents and datafiles; drop tablespace MYTISJS5_TEMP including contents and datafiles;