關於一次Oracle資料庫DMP文件導入的記述
這是一篇Pentaho產品不相關的Oracle資料庫操作記錄。僅以此紀念半夜之辛勞。
一 字符集探查
查看dmp的字符集和要導入的oracle的字符集是否一致。
查看oracle的字符集
SQL> select userenv("language") from dual;
USERENV("LANGUAGE")
-----------------------------------------------
SIMPLIFIED CHINESE_CHINA. ZHS16GBK
查看DMP文件字符集
使用UltraEdit打開,會看到字符集。
因DMP文件字符集(AL32UTF8)與Oracle資料庫字符集(ZHS16GBK)不一致。導致通過IMP程序導入時報錯:
IMP-00038: 無法轉換為環境字符集句柄
IMP-00000: 未成功終止導入
二 Oracle資料庫字符集更改
本次需更換的字符集.
AMERICAN_AMERICA.AL32UTF8
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
查看字符集命令
select * from v$nls_parameters;
select * from nls_database_parameters;
oracle資料庫的字符集更改 步驟
SQL> conn / as sysdba --需要使用SYSDBA帳戶
SQL> startup mount
SQL> shutdown immediate; --停止資料庫
SQL> startup mount; --啟動資料庫到 mount 狀態
SQL> alter session set sql_trace=true;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL>alter databasecharacter set INTERNAL_USE AL32UTF8; --修改字符集ZHS16GBK->AL32UTF8
SQL> shutdown immediate; --再次關閉資料庫
SQL> STARTUP; --啟動資料庫
查詢修改後的字符集
SQL> select userenv("language") from dual;
USERENV("LANGUAGE")
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8
三 導入DMP文件
1 實用程序IMP和IMPDP的區別
EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。
IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。
2 IMP實用程序導入DMP文件
由於不知此將導入的DMP文件是用exp實用程序導出還是用expdp實用程序導出。So,本次導入操作首先嘗試使用exp實用程序對應的imp實用程序進行操作。
在CMD界面輸入imp導入命令
C:UsersAdministrator>impdp scott/tiger file=c: est1.dmp full=y ignore=y;
執行後依然報下述錯誤:
IMP-00038: 無法轉換為環境字符集句柄
IMP-00000: 未成功終止導入
通過網路查找原因,造成此錯誤的疑是下述原因:
2.1 此DMP文件是採用expdp導出的數據文件,採用imp無法導入導致此錯誤。
解決方法:改用impdp實用程序執行導入操作。
2.2 由高版本資料庫導出的數據文件,在低版本資料庫無法正常導入。
解決方法:例如導出數據的伺服器版本是11.2.0.1.0,導入的伺服器版本為11.1.0.6.0導出語句末尾添加version=11.1.0.6.0。
Expdp 戶名/密碼 directory=目錄名 dumpfile=備份文件名.dmp logfile=日誌文件.log version= 11.1.0.6.0
3 IMPDP實用程序導入DMP文件
再次嘗試使用impdp實用程序進行導入操作。結果是成功的。證明此DMP文件是由expdp實用程序導出。
在使用impdp實用程序導入操作過程中,因導入語句拼寫錯誤導致多種導入錯誤產生,在此記述,以備後事之師。
3.1 導入目錄缺失
導入命令:
C:UsersAdministrator>impdp scott/tiger@XKZENON directory="c:" DUMPFILE=test1.
dmp full=y;
錯誤信息:
ORA-39002: 操作無效
ORA-39070: 無法打開日誌文件。
ORA-39087: 目錄名 C: 無效
解決辦法:
創建導入邏輯目錄,並給導入賬號scott賦予指定目錄的操作許可權。
SQL> create or replace directory expdir as "c:";
目錄已創建。
SQL> grant read,write on directory expdir to scott;
授權成功。
3.2 導入賬號為授權
導入命令修改為:
C:UsersAdministrator>impdp scott/tiger@XKZENON directory=expdir DUMPFILE=test1
.dmp full=y remap_schema=EDBADM:scott;
錯誤信息:
ORA-31631: 需要許可權
ORA-39122: 未授權的用戶不能執行 REMAP_SCHEMA 重新映射。
解決辦法:
當執行impdp操作指定remap_schema參數時,需要具備imp_full_database許可權。為導入賬號scott進行授權。
SQL> grant imp_full_database to scott;
授權成功。
3.3 導入表空間缺失
加remap_schema參數後,提示tablespace不存在。錯誤信息忘記截圖了哈:)。
在impdp導入命令中添加下述參數:
REMAP_TABLESPACE=sourcespacename:targetspacename
添加remap_tablespace參數後,依然提示表空間不存在。錯誤如下:
ORA-39083: 對象類型 TABLE:"SCOTT"."TEST1" 創建失敗, 出現錯誤:
ORA-00959: 表空間 "USERS;" 不存在
解決辦法:
通過網路查找原因,給出如下兩種方法:創建導出數據源表空間或者加入ignore = y 參數。
3.4 導入成功
通過加入ignore = y 參數。終於成功的將DMP數據文件導入到Oracle資料庫中。執行過程記錄如下。
C:UsersAdministrator>impdp scott/tiger@XKZENON directory=expdir DUMPFILE=test1
.dmp full=y remap_schema=EDBADM:scott REMAP_TABLESPACE=EDS_EQP_IDX_TBS:users ign
ore=y;
Import: Release 11.2.0.1.0 - Production on 星期二 1月 23 00:12:46 2018
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options
由於以下參數, 舊有模式處於活動狀態:
舊有模式參數: "ignore=TRUE" 位置: Command Line, 替換為: "table_exists_action=app
end"
已成功載入/卸載了主表 "SCOTT"."SYS_IMPORT_FULL_01"
啟動 "SCOTT"."SYS_IMPORT_FULL_01": scott/********@XKZENON directory=expdir DUMP
FILE=test1.dmp full=y remap_schema=EDBADM:scott REMAP_TABLESPACE=EDS_EQP_IDX_TBS
:users table_exists_action=append
處理對象類型 TABLE_EXPORT/TABLE/TABLE
處理對象類型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 導入了 "SCOTT"."TEST1" 372.4 MB 2882820 行
作業 "SCOTT"."SYS_IMPORT_FULL_01" 已於 00:13:36 成功完成
TAG:全球大搜羅 |