【整理】Oracle數據泵導入導出數據看這一篇就足夠了

準備工作:

登錄sys管理員賬號或帶dba權限的普通賬號進行創建新的表空間及用戶,並把用戶與表空間做關聯關係

  ---創建臨時表空間
      create temporary tablespace yd_temp
      tempfile 'D:\oracledata\file_temp.dbf'   --windons對應磁盤路徑或Linux路徑
      size 50m 
      autoextend on 
      next 50m maxsize 2048m 
      extent management local; 

  ---新建表空間,並且擴容
      create tablespace wsbsdt datafile '/home/oracle/abcdef.dbf'
     size 1024M AUTOEXTEND  on NEXT 8M MAXSIZE 32240M

        ---追加表空間大小
    ALTER TABLESPACE wsbsdt ADD DATAFILE '/home/oracle/abcdef1.dbf'
      SIZE 1024M AUTOEXTEND  ON NEXT 8M MAXSIZE 32240M;

      ---創建用戶並指定表空間
       create user loginname identified by 123456 --設置賬戶密碼loginname/123456
       default tablespace file_data 
       temporary tablespace file_temp;
     ---給用戶授予dba權限
       grant connect,resource,dba to loginname;

    ---查看所有directory目錄
    select * from dba_directories;

    ---使用dba用戶創建directory目錄,並手動在服務器創建相應的目錄
    create directory super_data as 'F:\bigData'; 

    ---刪除directory目錄
    drop directory super_data

    ---給用戶授予directory目錄的讀寫權限(目標用戶有dba權限則不用)
    grant read,write on directory super_data to loginname 

    ---查詢編碼集
    SELECT * FROM NLS_DATABASE_PARAMETERS

     ---查詢當前用戶所有表數據
    select sum(num_rows)
      from (select t.table_name, t.num_rows, t.blocks, t.empty_blocks
          from user_tables t)

     ---查詢表空間情況
    SELECT tablespace_name,
       file_id,
       file_name,
        round(bytes / (1024 * 1024), 0) total_space
      FROM dba_data_files
 ORDER BY tablespace_name;

---表空間使用情況
 SELECT F.TABLESPACE_NAME,
       (T.TOTAL_SPACE - F.FREE_SPACE) / 1024 "USED (GB)",
       F.FREE_SPACE / 1024 "FREE (GB)",
       T.TOTAL_SPACE / 1024 "TOTAL(GB)",
       (ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% ' PER_FREE
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BLOCKS *
                         (SELECT VALUE / 1024
                            FROM V$PARAMETER
                           WHERE NAME = 'db_block_size') / 1024)) FREE_SPACE
          FROM CDB_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F,
       (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
          FROM CDB_DATA_FILES
         GROUP BY TABLESPACE_NAME) T
 WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;

 ---查看錶空間是否開啓了自動擴展的功能 
SELECT T.TABLESPACE_NAME,D.FILE_NAME,D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS 
FROM DBA_TABLESPACES T,DBA_DATA_FILES D 
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME 
ORDER BY TABLESPACE_NAME,FILE_NAME; 

 Linux環境給用戶賦權      chown  -R  oracle:oinstall   /home/oracle/data 

 

Oracle數據泵方式的導出導入

oracle數據泵導出expdp

expdp zhangsan/[email protected]:1521/orcl
      tables=SQWERTY106899 
      dumpfile=testdata.dmp directory=super_data 
      logfile=export.log version=11.2.0.1.0

說明
tables     數據庫表名,導出到多個表以逗號拼接即可,如果需要導出所有表則不需要此參數
dumpfile   是導出的名字任意填寫
directory  是導出的存放路徑
logfile    導出日誌文件,當前目錄下第一次導出不需要此參數
version    版本號參數,只有高版本往低版本導入數據,在高版本導出時需要加上參數並對應低版本的版本號

oracle數據泵導入impdp

impdp wangwu/[email protected]:1521/orcl  directory=super_data
      dumpfile=QWERTY6899.dmp remap_tablespace=tb_namespace:tb_dataspace 
      remap_schema=zhangsan:wangwu table_exists_action=replace


說明
directory              導入文件存放的路徑
dumpfile               導入文件的名字
remap_tablespace       導出數據庫的表空間名與目標導入的數據庫表空間名 
remap_schema           導出用戶名與導入用戶名(必要)

table_exists_action    表示對存在的表結構的處理,有以下四種方式
                        1)  skip:默認操作
                        2)  replace:先drop表,然後創建表,最後插入數據(首選)
                        3)  append:在原來數據的基礎上增加數據
                        4)  truncate:先truncate,然後再插入數據

Oracle普通方式的導出導入

oracle普通導出exp

exp zhangsan/[email protected]:1521/orcl  
    file=E:\work\QWERTY6689.dmp tables=(ASDFGHJ9988)



說明
file        導出文件存放路徑及名字
tables      需要導出的數據庫表,多個表以逗號拼接,如需導出所有表則去掉此參數

oracle普通導入imp

(導入目標庫前如存在相同表、視圖和函數需先手動清掉,否則是直接追加數據)

imp  wangwu/[email protected]:1521/orcl  file=E:/work/ASDFGHJ8899.dmp
     ignore=y full=y tablespaces=tb_space



說明
file            導入文件存放路徑
ignore          是否忽略創建錯誤y/n,一般是y
full            是否導出整個文件y/n,一般是y
tablespaces     導出數據庫的表空間名

     總結  

       什麼時候用數據泵什麼時候普通方式導入導出數據根據實際情況決定,一般數據量特別大的數據十萬及百萬級以上推薦使用數據泵,導出導入速度非常快,但需要dba權限才能操控文件目錄創建或授權給用戶。數據量十萬以下的用普通方式導出即可,普通方式操作簡單快捷

 

 

常見問題解決

問題1:當使用數據泵要導入數據時候,只有一個dmp文件,其他信息都不知道情況下,怎麼能快速獲取到源數據的用戶名和表空間名順利導入數據呢?

解決思路:

      按照正常數據泵導入寫好導入的命令,不知道用戶名和表空間則不寫參數 remap_tablespace 和 remap_schema

     如,

E:\work\develop\oracle11g_11_2_0\product\11.2.0\dbhome_1\BIN>impdp zhangsan/[email protected]:1521/orcl
directory=SUPER_DATA dumpfile=ASDFGHJ9988.dmp

直接回車,然後會報一堆錯誤,找到這個錯誤

ORA-01918: user 'wangwu' does not exist

從中就可以獲取到源數據的導出用戶名爲“ wangwu ”,然後在導入命令中加上 remap_schema 參數再次執行,

依然報錯,找到此錯誤

ORA-00959: tablespace 'TESTSPACE' does not exist

可以看出這個“TESTSPACE”就是源數據的表空間名

至此,就取得了源數據的用戶名和表空間名,再次加上 remap_tablespace 參數就能順利導入數據了

 

問題2:當做數據遷移,由於導出導入端數據有權限或其他限制,只能用exp,imp導出導入,如果表結構包含clob數據類型字段,則在導入時無法創建表結構,連帶着數據無法導入,會報表空間不一致的錯誤,無法導入該表

解決思路:

      1、單獨導出包含clob字段的表,手動創建表結構,然後在使用imp導入時候去掉參數 ignore=y ,加上data_only=y,然後數據就可以順利導入。
      2、重新創建一個報錯時候的表空間名,imp語句不改變也可以順利導入 

未完待續... ...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章