本文將通過plsql客戶端工具,演示如何對Oracle數據庫中的表以dmp文件的格式進行導出和導入。
dmp的導出
步驟如下:
1、打開plsql並登陸,點擊 工具 ——> 導出表
2、在打開的窗口選中要導出的表, 輸出文件 那里指定導出的dmp文件的保持路徑和文件名
3、點擊 導出
dmp的導入
步驟如下:
1、打開plsql並登陸,點擊 工具 ——> 導入表
打開plsql並登陸,點擊 工具 ——> 導出表
2、在打開的窗口中,導入文件 那里選擇dmp文件所在路徑和文件
3、點擊 導入
場景:
在已有dmp文件而不知道其中表的表空間名的情況下,有以下兩種解決方法:
1、通過編輯器打開dmp文件,通過搜索關鍵字“TABLESPACE”,找到所有表的所屬表空間,然后將其替換為自定義的表空間。再將該dmp文件通過plsql導入到Oracle數據庫中。
(該方法只適用在文件內容 較少的情況下,而且將表的所屬表空間修改,可能會有不可預計的影響)
2、在不知表空間名的情況下,還是直接通過plsql將dmp文件導入到Oracle數據庫中,在導入的過程中,可能會產生很多的錯誤,暫時不管。在導入程序執行完后,我們直接點擊 plsql導入窗口中的 日志 選項,查看導入過程中日志信息。這時,我們可以通過日志所提示的錯誤信息,得知某些表原先所屬的表空間名,或者是其它的一些重要信息。
(小編遇到的情況是不知道dmp文件中所包含的表的所屬表空間名,在第一次導入dmp文件失敗后,通過查看日志找到數據庫中的表原先所屬的所有表空間后,依次創建這些表空間,並將數據庫清空后再次重新導入,此時已經成功。注:至於導出dmp文件時的用戶跟導入時的用戶不同也是可以的,反正我是沒受到影響,當然,能夠一樣就更好了)
以下是創建數據庫用戶並授權,表空間的設定等相關的sql語句:
-- 創建oracle用戶
create user xue identified by 123456;
(“xue”為數據庫用戶名,“123456”為該用戶密碼)
-- 為新建用戶授予角色權限
grant dba to xue;
(為了方便,直接將dba角色權限賦予新建的數據庫用戶)
-- 設置oracle帳號密碼永久不過期
-- 1、查看用戶的proifle是那個,一般是default:
SELECT username,PROFILE FROM dba_users;
-- 2、查看指定概要文件(如default)的密碼有效期設置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
-- 3、將密碼有效期由默認的180天修改成“無限制”:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(前三步已經解決第四步沒必要)
-- 4、修改后,還沒有被提示ORA-28002警告的用戶不會再碰到同樣的提示;
-- 已經被提示的用戶必須再改一次密碼,舉例如下:
$sqlplus / as sysdba
sql> alter user xue identified by 123456;
(剛新建的數據庫用戶默認的賬號密碼有效期為180天,避免以后失效,直接將其設為永久不過期)
-- 1.創建表空間
create tablespace XUESPACE datafile 'C:\Java\oracle_tablespace\XUESPACE.dbf' size 100m reuse autoextend on next 10m maxsize unlimited;
(“XUESPACE”為新建的表空間名稱,“C:\Java\oracle_tablespace\XUESPACE.dbf”是與表空間對應的文件的路徑和文件名,其它的表空間大小相關的設定,暫時可忽略)
-- 2.創建用戶,指定 表空間 和 臨時表空間
create user xue identified by 123456 default tablespace XUESPACE temporary tablespace temp;
(“XUESPACE”為用戶“xue”指定的表空間,“temp”為其臨時表空間)
-- 3.查看當前用戶默認的表空間、臨時表空間
select * from user_users;
( username 為當前用戶名;
default_tablespace 為當前用戶默認的表空間;
temporary_tablespace 為當前用戶默認的臨時表空間 )
-- 4.修改用戶默認的表空間
alter user xue default tablespace spaceX;
(將用戶“xue”的默認表空間改為“spaceX”)
-- 查看某個表空間有多少張表
select * from all_tables where tablespace_name='spaceX';
(“spaceX”為表空間名,此處需要注意表空間名的大小寫,如“USERS”必須為大寫才能將數據查詢出來)
-- 查看某個用戶關聯的所有表空間及各個表空間中表的數量
select tablespace_name,count(*) from all_tables where owner = 'XUE' group by tablespace_name;
-- Oracle如何查詢表空間對應文件所在的路徑
select * from dba_data_files where tablespace_name='USERS';
(“USERS”為表空間名)