天天看點

【整理】Oracle資料泵導入導出資料看這一篇就足夠了準備工作:Oracle資料泵方式的導出導入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語句不改變也可以順利導入 

未完待續... ...

繼續閱讀