【exp/imp】將US7ASCII字符集的dmp文件導入到ZHS16GBK字符集的數據庫中


exp/imp】US7ASCII字符集的dmp文件導入到ZHS16GBK字符集的數據庫中

 

1.1  BLOG文檔結構圖

wpsA21C.tmp 

 

1.2  前言部分

1.2.1  導讀和注意事項

各位技術愛好者,看完本文后,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~

如何將US7ASCII字符集的dmp文件導入到ZHS16GBK字符集的數據庫中(重點,2種方法)?

從dmp文件可以獲取到哪些信息?如何從dmp文件獲取到dmp文件的字符集(重點,N種方法)?

如何從dmp文件中獲取到其中的DDL語句,例如建表、建索引語句等(2種方法)

dmp文件導入的一般步驟

imp工具的indexfile選項的作用

軟件UE、EditPlusPilotedit軟件的使用

 

Tips

本文在itpubhttp://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和微信公眾號(xiaomaimiaolhr有同步更新

文章中用到的所有代碼相關軟件相關資料及本文的pdf版本都請前往小麥苗的雲盤下載小麥苗的雲盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/

若網頁文章代碼格式有錯亂,下載pdf格式的文檔來閱讀

本篇BLOG,代碼輸出部分一般放在一行一列的表格中。

⑤ 本文適合於Oracle初中級人員閱讀,Oracle大師請略過本文。

本文有錯誤或不完善的地方請大家多多指正,您的批評指正是我寫作的最大動力。

1.3  本文相關知識點

1.3.1  可以從dmp文件獲取哪些信息?

在開發中常常碰到,需要導入dmp文件到現有數據庫。這里的dmp文件可能來自於其它系統,所以,一般情況下是不知道導出程序(exp)的版本、導出時間或者導出模式等信息的。那么如何從現有的dmp文件中獲取到這些信息呢?下面作者將一一講解。

1.3.1.1  獲取基本信息:導出的版本、時間、導出的用戶

下面的示例中exp_ddl_lhr_02.dmp是生成的dmp文件:

[ZFZHLHRDB1:oracle]:/tmp>strings exp_ddl_lhr_02.dmp | head -10

TEXPORT:V11.02.00  ====版本號 

DSYS    ====使用SYS用戶導出

RTABLES ====基於表模式導出,RUSERS表示基於用戶模式,RENTIRE表示基於全庫模式

4096

Tue Aug 2 16:8:8 2016/tmp/exp_ddl_lhr_02.dmp====生成的時間和文件地址

#C#G

#C#G

+00:00

BYTE

UNUSED

 

 

1.3.1.2  獲取dmp文件中的表信息

下面的示例中,exp_ddl_lhr_02.dmp是生成的dmp文件:

[ZFZHLHRDB1:oracle]:/tmp>strings exp_ddl_lhr_02.dmp | grep "CREATE TABLE"|awk '{print $3}'|sed 's/"//g'

EMP ====說明exp_ddl_lhr_02.dmp中只有一個emp

 

1.3.1.3  解析dmp文件生成parfile文件

下面的示例中,exp_ddl_lhr_03.dmp是生成的dmp文件:

[ZFZHLHRDB1:oracle]:/tmp>strings  exp_ddl_lhr_03.dmp | grep "CREATE TABLE"|awk '{print $3}'|sed 's/"//g'|awk '{ if (FNR==1) print "tables="$1 ; else print ","$1 }'

tables=DEF$_AQCALL

,DEF$_AQERROR

,DEF$_CALLDEST

,DEF$_DEFAULTDEST

,DEF$_DESTINATION

,DEF$_ERROR

,DEF$_LOB

,DEF$_ORIGIN

,DEF$_PROPAGATOR

,DEF$_PUSHED_TRANSACTIONS

,MVIEW$_ADV_INDEX

[ZFZHLHRDB1:oracle]:/tmp>

 

 

1.3.1.4  如何查看dmp文件的字符集

一、 imp導入命令查看

2種辦法可以查看dmp文件的字符集,第一種辦法為imp導入命令查看,示例如下所示:

[ZFLHRZHDB1:oracle]:/oracle>ORACLE_SID=lhrdb

[ZFLHRZHDB1:oracle]:/oracle>export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

[ZFLHRZHDB1:oracle]:/oracle>exp  \'/ AS SYSDBA\'  tables=scott.emp  file=/tmp/exp_ddl_lhr_03.dmp  log=/tmp/exp_table.log  buffer=41943040 rows=n compress=n

Export: Release 11.2.0.4.0 - Production on Tue Oct 25 17:14:49 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set<<<--當前NLS_LANG環境變量的值即生成的dmp文件的字符集

server uses ZHS16GBK character set (possible charset conversion)<<<<<<<--當前數據庫的字符集

Note: table data (rows) will not be exported

About to export specified tables via Conventional Path ...

Current user changed to SCOTT

. . exporting table                            EMP

EXP-00091: Exporting questionable statistics.

EXP-00091: Exporting questionable statistics.

Export terminated successfully with warnings.

[ZFLHRZHDB1:oracle]:/oracle>ORACLE_SID=mydb <<---更換數據庫

[ZFLHRZHDB1:oracle]:/oracle>export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

[ZFLHRZHDB1:oracle]:/oracle>imp  \'/ AS SYSDBA\'  tables=xxx.xx  file=/tmp/exp_ddl_lhr_03.dmp

Import: Release 11.2.0.4.0 - Production on Tue Oct 25 16:27:15 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export file created by EXPORT:V11.02.00 via conventional path<<<<<<<<<----dmp文件的導出版本號

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set<<<<<<--當前的NLS_LANG環境變量的值

import server uses WE8ISO8859P1 character set (possible charset conversion)<<<<<<---當前數據庫的字符集

export client uses AL32UTF8 character set (possible charset conversion)<<<<<<--dmp文件的字符集

IMP-00029: cannot qualify table name by owner (xxx.xx), use FROMUSER parameter

IMP-00000: Import terminated unsuccessfully

 

如果NLS_LANG的值和當前數據庫的字符集相同,那么將不顯示“server usesimport server uses”行。如果沒有顯示“export client”行,那么說明當前dmp文件的字符集和當前的NLS_LANG環境變量的值相同。無論是使用exp還是imp工具都會顯示當前的NLS_LANG環境變量的值(表現為“Export done”、“import done”)。

二、 十六進制的第2和第3個字節

第二種查看dmp文件字符集的辦法是,以十六進制的方式打開dmp文件然后查看第2和第3個字節。如下所示:

[ZFLHRZHDB1:oracle]:/oracle>cat /tmp/exp_ddl_lhr_03.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 1-2,7-8

0369

[ZFLHRZHDB1:oracle]:/oracle>cat /tmp/exp_ddl_lhr_03.dmp |od -x|head -1

0000000 0303 4569 5058 524f 3a54 3156 2e30 3230

[oracle@rhel6lhr env_oracle]$

 

 

然后在數據庫中可以查到十六進制0369代表的字符集:

SYS@lhrdb> SELECT NLS_CHARSET_NAME(TO_NUMBER('0369','XXXX')) FROM DUAL;

NLS_CHARSET_NAME(TO_NUMBER('0369','XXXX'

----------------------------------------

AL32UTF8

 

 

以上結果說明dmp文件的字符集是UTF8若dmp文件在Windows平台下,則可以使用軟件UltraEditUE)、EditPlusPilotedit等文本編輯工具以十六進制的方式打開dmp文件查看。其中,軟件Pilotedit可以輕松打開上G的文件。示例如下:

wpsA22D.tmp 

需要注意的是,十六進制在Linux和Windows下順序不同。

 

 

SELECT NLS_CHARSET_NAME(TO_NUMBER('0001', 'XXXX')) US7ASCII,

       NLS_CHARSET_NAME(TO_NUMBER('0354', 'XXXX')) ZHS16GBK,

       NLS_CHARSET_NAME(TO_NUMBER('0369', 'XXXX')) AL32UTF8,

       TO_CHAR(NLS_CHARSET_ID('US7ASCII'), 'XXXX') US7ASCII_ID,

       TO_CHAR(NLS_CHARSET_ID('ZHS16GBK'), 'XXXX') ZHS16GBK_ID,

       TO_CHAR(NLS_CHARSET_ID('AL32UTF8'), 'XXXX') AL32UTF8_ID

  FROM DUAL;

SYS@ora10g> SELECT NLS_CHARSET_NAME(TO_NUMBER('0001', 'XXXX')) US7ASCII,

  2         NLS_CHARSET_NAME(TO_NUMBER('0354', 'XXXX')) ZHS16GBK,

  3         NLS_CHARSET_NAME(TO_NUMBER('0369', 'XXXX')) AL32UTF8,

  4         TO_CHAR(NLS_CHARSET_ID('US7ASCII'), 'XXXX') ,

  5         TO_CHAR(NLS_CHARSET_ID('ZHS16GBK'), 'XXXX') ,

  6         TO_CHAR(NLS_CHARSET_ID('AL32UTF8'), 'XXXX')

  7    FROM DUAL;

 

US7ASCII                                 ZHS16GBK                                 AL32UTF8                                 TO_CH TO_CH TO_CH

---------------------------------------- ---------------------------------------- ---------------------------------------- ----- ----- -----

US7ASCII                                 ZHS16GBK                                 AL32UTF8                                     1   354   369

 

SYS@ora10g>

 

 

wpsA22E.tmp 

 

1.3.2  如何獲取數據庫DDL的創建語句

數據泵工具(impdp)工具給我們提供了SQLFILE的命令行選項,只獲取DDL語句,並未真正的執行數據導入。另外,若單純為了導出DDL語句則可以在使用expdp導出的時候使用CONTENT=METADATA_ONLYEXCLUDE=STATISTICS選項,這樣導出的DMP文件比較小。如下所示:

 

expdp \'/ AS SYSDBA\' DIRECTORY=DATA_PUMP_DIR DUMPFILE=lhrsql20161215.dmp LOGFILE=lhrsql20161215.log CONTENT=METADATA_ONLY SCHEMAS=SCOTT  EXCLUDE=STATISTICS

impdp  \'/ AS SYSDBA\'  DIRECTORY=DATA_PUMP_DIR DUMPFILE=lhrsql20161215.dmp  LOGFILE=imp_exptest.log SQLFILE=expddl_lhr.sql

 

查看expddl_lhr.sql文件即可獲取DDL語句。

imp工具使用SHOW=Y LOG=GET_DDL.sql的方式,可以看到清晰的DDL腳本,同時也不會真正的執行數據導入。另外,若單純為了導出DDL語句則可以在使用exp導出的時候使用ROWS=N選項,這樣導出的DMP文件比較小。如下所示:

exp  \'/ AS SYSDBA\'  TABLES=SCOTT.EMP  FILE=/tmp/exp_ddl_lhr_01.dmp  LOG=/tmp/exp_table.log  BUFFER=41943040 ROWS=N COMPRESS=N

imp \'/ AS SYSDBA\' FILE=/tmp/exp_ddl_lhr_01.dmp SHOW=Y LOG=/tmp/get_ddl.sql BUFFER=20480000  FULL=Y

 

 

查看get_ddl.sql文件即可獲取DDL語句。

 

---- 生成DDL語句不會導入數據

--expdp \'/ AS SYSDBA\' tables=lhr.exptest  directory=DATA_PUMP_DIR  dumpfile=exptest.dmp logfile=exp_exptest.dmp  EXCLUDE=STATISTICS

--expdp \'/ AS SYSDBA\' directory=DATA_PUMP_DIR dumpfile=lhrsql20161215.dmp logfile=lhrsql20161215.log content=metadata_only schemas=SCOTT  EXCLUDE=STATISTICS

impdp  \'/ AS SYSDBA\'  directory=DATA_PUMP_DIR dumpfile=lhrsql20161215.dmp  logfile=imp_exptest.log sqlfile=exptest.sql

 

exp  \'/ AS SYSDBA\'  tables=scott.emp  file=/tmp/exp_ddl_lhr_01.dmp  log=/tmp/exp_table.log  buffer=41943040 rows=n compress=n

imp \'/ AS SYSDBA\' file=/tmp/exp_ddl_lhr_01.dmp show=y log=/tmp/get_ddl.sql buffer=20480000  full=y

 

1.3.2.1  imp示例:

[ZFZHLHRDB1:oracle]:/oracle>exp  \'/ AS SYSDBA\'  tables=scott.emp  file=/tmp/exp_ddl_lhr_01.dmp  log=/tmp/exp_table.log  buffer=41943040 rows=n compress=n

 

Export: Release 11.2.0.4.0 - Production on Tue Aug 2 15:42:11 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Note: table data (rows) will not be exported

 

About to export specified tables via Conventional Path ...

Current user changed to SCOTT

. . exporting table                            EMP

Export terminated successfully without warnings.

[ZFZHLHRDB1:oracle]:/oracle>imp \'/ AS SYSDBA\' file=/tmp/exp_ddl_lhr_01.dmp show=y log=/tmp/get_ddl.sql buffer=20480000  full=y

 

Import: Release 11.2.0.4.0 - Production on Tue Aug 2 15:42:44 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

 

Export file created by EXPORT:V11.02.00 via conventional path

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

. importing SYS's objects into SYS

. importing SCOTT's objects into SCOTT

"ALTER SESSION SET CURRENT_SCHEMA= "SCOTT""

"CREATE TABLE "EMP" ("EMPNO" NUMBER(4, 0), "ENAME" VARCHAR2(10), "JOB" VARCH"

"AR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NUM"

"BER(7, 2), "DEPTNO" NUMBER(2, 0))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRAN"

"S 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST "

"GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS"

"CREATE UNIQUE INDEX "PK_EMP" ON "EMP" ("EMPNO" )  PCTFREE 10 INITRANS 2 MAX"

"TRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREEL"

"IST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING"

"ALTER SESSION SET CURRENT_SCHEMA= "SCOTT""

"ALTER TABLE "EMP" ADD  CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") USING INDE"

"X PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MIN"

"EXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "US"

"ERS" LOGGING ENABLE "

"ALTER TABLE "EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFEREN"

"CES "DEPT" ("DEPTNO") ENABLE NOVALIDATE"

"ALTER TABLE "EMP" ENABLE CONSTRAINT "FK_DEPTNO""

Import terminated successfully without warnings.

[ZFZHLHRDB1:oracle]:/oracle>

 

 

由於格式比較混亂,直接運行會報錯,建榮的書中給了一段代碼來格式化:

[ZFZHLHRDB1:oracle]:/tmp>more /tmp/get_ddl.sql

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Tes

 

Export file created by EXPORT:V11.02.00 via conventional path

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

. importing SYS's objects into SYS

. importing SCOTT's objects into SCOTT

"ALTER SESSION SET CURRENT_SCHEMA= "SCOTT""

"CREATE TABLE "EMP" ("EMPNO" NUMBER(4, 0), "ENAME" VARCHAR2(10), "JOB" VARCH"

"AR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NUM"

"BER(7, 2), "DEPTNO" NUMBER(2, 0))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRAN"

"S 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST "

"GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS"

"CREATE UNIQUE INDEX "PK_EMP" ON "EMP" ("EMPNO" )  PCTFREE 10 INITRANS 2 MAX"

"TRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREEL"

"IST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING"

"ALTER SESSION SET CURRENT_SCHEMA= "SCOTT""

"ALTER TABLE "EMP" ADD  CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") USING INDE"

"X PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MIN"

"EXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "US"

"ERS" LOGGING ENABLE "

"ALTER TABLE "EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFEREN"

"CES "DEPT" ("DEPTNO") ENABLE NOVALIDATE"

"ALTER TABLE "EMP" ENABLE CONSTRAINT "FK_DEPTNO""

Import terminated successfully without warnings.

[ZFZHLHRDB1:oracle]:/tmp>more /tmp/gettabddl.sh

awk '

  / \"BEGIN /   { N=1; }

  / \"CREATE /   { N=1; }

  / \"CREATE INDEX/   { N=1; }

  / \"CREATE UNIQUE INDEX/  { N=1; }

  / \"ALTER /   { N=1; }

  / \" ALTER /   { N=1; }

  / \"ANALYZE /   { N=1; }

  / \"GRANT /    { N=1; }

  / \"COMMENT /   { N=1; }

  / \"AUDIT /     { N=1; }

  N==1 { printf "\n/\n"; N++ }

  /\"$/ {

    if (N==0) next;

    s=index( $0, "\"" );

    ln0=length( $0 )

    if ( s!=0 ) {

      lcnt++

      if ( lcnt >= 30 ) {

        ln=substr( $0,s+1,length( substr($0,s+1))-1)

        t=index( ln, ")," )

        if ( t==0 ) { t=index( ln, ", " ) }

        if ( t==0 ) { t=index( ln, ") " ) }

        if ( t > 0 ) {

          printf "%s\n%s",substr( ln,1,t+1), substr(ln, t+2)

          lcnt=0

        }

        else {

          printf "%s", ln

          if ( ln0 < 78 ) { printf "\n" ; lcnt=0 }

        }

      }

      else {

        printf "%s",substr( $0,s+1,length( substr($0,s+1))-1 )

        if ( ln0 < 78 ) { printf "\n" ; lcnt=0 }

      }

    }

  }

  END { printf "\n/\n"}

' $* |sed '1,2d; /^$/ d;

s/STORAGE *(INI/~    STORAGE (INI/g;

s/, "/,~    "/g;

s/ (\"/~   &/g;

s/PCT[FI]/~    &/g;

s/[( ]PARTITION /~&/g;

s/) TABLESPACE/)~    TABLESPACE/g;

s/   , / ,~/g;

s/ DATAFILE  /&~/' | tr "~" "\n"

[ZFZHLHRDB1:oracle]:/tmp>

[ZFZHLHRDB1:oracle]:/tmp>ksh /tmp/gettabddl.sh  /tmp/get_ddl.sql > /tmp/gen_tabddl.sql

[ZFZHLHRDB1:oracle]:/tmp>more /tmp/gen_tabddl.sql

ALTER SESSION SET CURRENT_SCHEMA= "SCOTT"

/

CREATE TABLE "EMP"

    ("EMPNO" NUMBER(4, 0),

    "ENAME" VARCHAR2(10),

    "JOB" VARCHAR2(9),

    "MGR" NUMBER(4, 0),

    "HIREDATE" DATE,

    "SAL" NUMBER(7, 2),

    "COMM" NUMBER(7, 2),

    "DEPTNO" NUMBER(2, 0)) 

    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

    TABLESPACE "USERS" LOGGING NOCOMPRESS

/

CREATE UNIQUE INDEX "PK_EMP" ON "EMP"

    ("EMPNO" ) 

    PCTFREE 10 INITRANS 2 MAXTRANS 255

    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

    TABLESPACE "USERS" LOGGING

/

ALTER SESSION SET CURRENT_SCHEMA= "SCOTT"

/

ALTER TABLE "EMP" ADD  CONSTRAINT "PK_EMP" PRIMARY KEY

    ("EMPNO") USING INDEX

    PCTFREE 10 INITRANS 2 MAXTRANS 255

    STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

    TABLESPACE "USERS" LOGGING ENABLE

/

ALTER TABLE "EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY

    ("DEPTNO") REFERENCES "DEPT"

    ("DEPTNO") ENABLE NOVALIDATE

/

ALTER TABLE "EMP" ENABLE CONSTRAINT "FK_DEPTNO"

/

[ZFZHLHRDB1:oracle]:/tmp>

 

 

這樣運行起來就方便多了。

1.3.2.2  imp的indexfile選項(indexfile導出表和索引的ddl語句)

 

exp和imp工具中可能存在把table從一個庫exp然后imp到另一個數據庫出現沒有指定tablespace而無法impimpindexfile參數中可以解決的。

Oracle的imp工具指定indexfile參數后,可以不導入任何對象,而只把需要創建的indexsql語句的形式寫入文本文件。創建庫表等sql語句也會寫入,但用rem注釋屏蔽。

一、查看並修改導入對象的存儲參數

如果原始庫中有些表比較大,exp導出對象的初始存儲空間設置可能比較高,導入時需要先申請分配較大的存儲空間,如果只進行邏輯結構的遷移耗時較長。這時可以用indexfile參數導出sql語句,篩選出初始空間較高的建表語句,手工創建。再次導入時使用ignore選項忽略對象創建錯誤。

如何解析inexfile文件:可以考慮用sed編輯器進行正則表達式替換,也可以寫個程序解析出initial超出一定閾值的庫表及其sql

 

示例如下所示:

[oracle@rhel6lhr tmp]$ exp  \'/ AS SYSDBA\'  TABLES=SCOTT.EMP  FILE=/tmp/exp_ddl_lhr_01.dmp  LOG=/tmp/exp_table.log  BUFFER=41943040 ROWS=N COMPRESS=N

 

Export: Release 11.2.0.3.0 - Production on Wed May 3 21:36:47 2017

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Note: table data (rows) will not be exported

 

About to export specified tables via Conventional Path ...

Current user changed to SCOTT

. . exporting table                            EMP

Export terminated successfully without warnings.

[oracle@rhel6lhr tmp]$ imp  \'/ AS SYSDBA\' file=/tmp/exp_ddl_lhr_01.dmp FULL=Y indexfile=/tmp/get_ti_ddl.sql rows=n

 

Import: Release 11.2.0.3.0 - Production on Wed May 3 21:38:10 2017

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

 

Export file created by EXPORT:V11.02.00 via conventional path

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Import terminated successfully without warnings.

[oracle@rhel6lhr tmp]$ more /tmp/get_ti_ddl.sql

 

REM  CREATE TABLE "SCOTT"."EMP" ("EMPNO" NUMBER(4, 0), "ENAME"

REM  VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE,

REM  "SAL" NUMBER(7, 2), "COMM" NUMBER(7, 2), "DEPTNO" NUMBER(2, 0))

REM  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536

REM  NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL

REM  DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS ;

CONNECT SCOTT;

CREATE UNIQUE INDEX "SCOTT"."PK_EMP" ON "EMP" ("EMPNO" ) PCTFREE 10

INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1

FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS"

LOGGING ;

REM  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY

REM  ("EMPNO") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255

REM  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST

REM  GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING ENABLE ;

REM  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY

REM  ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE NOVALIDATE ;

REM  ALTER TABLE "SCOTT"."EMP" ENABLE CONSTRAINT "FK_DEPTNO" ;

[oracle@rhel6lhr tmp]$

 

 

可以看到其中的創建表的SQL語句被注釋掉了,這個可以用vi命令或者文本工具來處理,處理之后就可以直接使用了。

 

1.3.2.3  impdp示例:

--expdp \'/ AS SYSDBA\' directory=DATA_PUMP_DIR schemas=SCOTT  dumpfile=exptest_sql.dmp logfile=exp_exptest.dmp

impdp  \'/ AS SYSDBA\'  directory=DATA_PUMP_DIR dumpfile=exptest_sql.dmp  logfile=imp_exptest.log sqlfile=exptest.sql

 

 

[ZFZHLHRDB1:oracle]:/oracle>expdp \'/ AS SYSDBA\' directory=DATA_PUMP_DIR schemas=SCOTT  dumpfile=exptest_sql.dmp logfile=exp_exptest.dmp

 

Export: Release 11.2.0.4.0 - Production on Wed Aug 3 15:14:55 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

Starting "SYS"."SYS_EXPORT_SCHEMA_01":  "/******** AS SYSDBA" directory=DATA_PUMP_DIR schemas=SCOTT dumpfile=exptest_sql.dmp logfile=exp_exptest.dmp

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 256 KB

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported "SCOTT"."DEPT"                              5.929 KB       4 rows

. . exported "SCOTT"."EMP"                               8.562 KB      14 rows

. . exported "SCOTT"."SALGRADE"                          5.859 KB       5 rows

. . exported "SCOTT"."TEST"                              5.007 KB       1 rows

. . exported "SCOTT"."BONUS"                                 0 KB       0 rows

Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:

  /oracle/app/oracle/admin/lhrdb/dpdump/exptest_sql.dmp

Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Wed Aug 3 15:15:16 2016 elapsed 0 00:00:20

 

[ZFZHLHRDB1:oracle]:/oracle>impdp  \'/ AS SYSDBA\'  directory=DATA_PUMP_DIR dumpfile=exptest_sql.dmp  logfile=imp_exptest.log sqlfile=exptest.sql

 

Import: Release 11.2.0.4.0 - Production on Wed Aug 3 15:16:06 2016

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

Master table "SYS"."SYS_SQL_FILE_FULL_01" successfully loaded/unloaded

Starting "SYS"."SYS_SQL_FILE_FULL_01":  "/******** AS SYSDBA" directory=DATA_PUMP_DIR dumpfile=exptest_sql.dmp logfile=imp_exptest.log sqlfile=exptest.sql

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SYS"."SYS_SQL_FILE_FULL_01" successfully completed at Wed Aug 3 15:16:09 2016 elapsed 0 00:00:02

 

[ZFZHLHRDB1:oracle]:/oracle>cd /oracle/app/oracle/admin/lhrdb/dpdump/

[ZFZHLHRDB1:oracle]:/oracle/app/oracle/admin/lhrdb/dpdump>more exptest.sql

-- CONNECT SYS

ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1';

ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1';

ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1';

ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1';

ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1';

ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ';

-- new object type path: SCHEMA_EXPORT/USER

-- CONNECT SYSTEM

CREATE USER "SCOTT" IDENTIFIED BY VALUES 'S:268AB71B15071D81F19C6FC5041FA8F8E49397470FFE05458B8C90D9E7F8;F894844C34402B67'

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

      PASSWORD EXPIRE

      ACCOUNT LOCK;

-- new object type path: SCHEMA_EXPORT/SYSTEM_GRANT

GRANT UNLIMITED TABLESPACE TO "SCOTT";

-- new object type path: SCHEMA_EXPORT/ROLE_GRANT

GRANT "CONNECT" TO "SCOTT";

GRANT "RESOURCE" TO "SCOTT";

-- new object type path: SCHEMA_EXPORT/DEFAULT_ROLE

ALTER USER "SCOTT" DEFAULT ROLE ALL;

-- new object type path: SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

-- CONNECT SCOTT

 

BEGIN

sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'LHRDB', inst_scn=>'4225469');

COMMIT;

END;

/

-- new object type path: SCHEMA_EXPORT/TABLE/TABLE

-- CONNECT SYS

CREATE TABLE "SCOTT"."DEPT"

   (    "DEPTNO" NUMBER(2,0),

        "DNAME" VARCHAR2(14 BYTE),

        "LOC" VARCHAR2(13 BYTE)

   ) SEGMENT CREATION IMMEDIATE

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" ;

CREATE TABLE "SCOTT"."EMP"

   (    "EMPNO" NUMBER(4,0),

        "ENAME" VARCHAR2(10 BYTE),

        "JOB" VARCHAR2(9 BYTE),

        "MGR" NUMBER(4,0),

        "HIREDATE" DATE,

        "SAL" NUMBER(7,2),

        "COMM" NUMBER(7,2),

        "DEPTNO" NUMBER(2,0)

   ) SEGMENT CREATION IMMEDIATE

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" ;

CREATE TABLE "SCOTT"."BONUS"

   (    "ENAME" VARCHAR2(10 BYTE),

        "JOB" VARCHAR2(9 BYTE),

        "SAL" NUMBER,

        "COMM" NUMBER

   ) SEGMENT CREATION DEFERRED

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

  TABLESPACE "USERS" ;

CREATE TABLE "SCOTT"."SALGRADE"

   (    "GRADE" NUMBER,

        "LOSAL" NUMBER,

        "HISAL" NUMBER

   ) SEGMENT CREATION IMMEDIATE

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" ;

CREATE TABLE "SCOTT"."TEST"

   (    "DUMMY" VARCHAR2(1 BYTE)

   ) SEGMENT CREATION IMMEDIATE

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" ;

-- new object type path: SCHEMA_EXPORT/TABLE/INDEX/INDEX

-- CONNECT SCOTT

CREATE UNIQUE INDEX "SCOTT"."PK_DEPT" ON "SCOTT"."DEPT" ("DEPTNO")

  PCTFREE 10 INITRANS 2 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" PARALLEL 1 ;

 

  ALTER INDEX "SCOTT"."PK_DEPT" NOPARALLEL;

CREATE UNIQUE INDEX "SCOTT"."PK_EMP" ON "SCOTT"."EMP" ("EMPNO")

  PCTFREE 10 INITRANS 2 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

  TABLESPACE "USERS" PARALLEL 1 ;

 

  ALTER INDEX "SCOTT"."PK_EMP" NOPARALLEL;

-- new object type path: SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

-- CONNECT SYS

ALTER TABLE "SCOTT"."DEPT" ADD CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")

  USING INDEX "SCOTT"."PK_DEPT"  ENABLE;

ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")

  USING INDEX "SCOTT"."PK_EMP"  ENABLE;

-- new object type path: SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

DECLARE I_N VARCHAR2(60);

  I_O VARCHAR2(60);

  NV VARCHAR2(1);

  c DBMS_METADATA.T_VAR_COLL;

  df varchar2(21) := 'YYYY-MM-DD:HH24:MI:SS';

stmt varchar2(300) := ' INSERT INTO "SYS"."IMPDP_STATS" (type,version,flags,c1,c2,c3,c5,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,d1,cl1) VALUES (''I'',6,:1,:2,:3,:4,:5,

:6,:7,:8,:9,:10,:11,:12,:13,NULL,:14,:15,NULL,:16,:17)';

BEGIN

  DELETE FROM "SYS"."IMPDP_STATS";

  i_n := 'PK_DEPT';

  i_o := 'SCOTT';

  EXECUTE IMMEDIATE stmt USING 2,I_N,NV,NV,I_O,4,1,4,1,1,1,0,4,NV,NV,TO_DATE('2016-07-07 22:00:11',df),NV;

 

  DBMS_STATS.IMPORT_INDEX_STATS('"' || i_o || '"','"' || i_n || '"',NULL,'"IMPDP_STATS"',NULL,'"SYS"');

  DELETE FROM "SYS"."IMPDP_STATS";

END;

/

《《《《。。。。。。。。篇幅原因,有省略,剩下的都是統計信息,生成sqlfile的時候也可以不用生成。。。。。。。。》》》》

 

-------------------------------------------------------------------------

 

1.4  本文簡介

一個網友找到我說,一個dmp文件導入數據庫中,中文一直是亂碼,看我能否幫忙解決一下。說真心話,一般情況下,亂碼問題和安裝問題,我一般不想接手,因為可能很簡單的問題,有的人懶的動腦,碰到問題就問。尤其對於安裝類問題,照着安裝文檔,一步一步來,一般都沒有問題。在這里把一張網友分享的圖片再分享一下:

wpsA23F.tmp

可是,問字符集的的哥們,我能感覺到他自己是下了功夫的,都是自己摸索了,實在解決不了,才找到的我。這種情況下,我果斷是要幫助的。好了,廢話不多說了,且看整個處理過程吧。

1.4.1  本文實驗環境介紹

項目

source db

target db

db 類型

 

 

db version

10.2.0.1.0

10.2.0.1.0

db 存儲

 

 

OS版本及kernel版本

 

 

字符集

US7ASCII

GBK

dmp文件字符集

US7ASCII

US7ASCII

1.5  開始導入

1.5.1  首先獲取dmp文件的相關信息

網友給的dmp文件:

wpsA24F.tmp 

大約30M,解壓后有282M左右:

wpsA250.tmp 

[oracle@rhel6lhr ~]$ strings /tmp/hhris.dmp | head -10                   

EXPORT:V10.02.01

DHHRIS

RUSERS

8192

                                       Wed Oct 16 5:0:14 2013/data/dbbackup/expdata/hhris.dmp

#G#G

#G#G

+08:00

BYTE

UNUSED

[oracle@rhel6lhr ~]$ strings /tmp/hhris.dmp  | grep "CREATE TABLE"|awk '{print $3}'|sed 's/"//g'

ADDTOHIS

APPOINT

APPOINTDETAIL

APPOINTMASTER

BACKUP_HISAPPOINT

BACKUP_R_DIAGNOSES

BACKUP_R_SERIES

BACKUP_R_STUDIES

DICT_CAPTION

DICT_CITY

DICT_CLASS

DICT_CLASSRULE

《《《《。。。。。。。。篇幅原因,有省略。。。。。。。。》》》》

USER_PARAM

USER_RIS

USER_WEB

WEB_LOG

WEB_USER

WORK_FLOW

WORK_NODE

[oracle@rhel6lhr ~]$

[oracle@rhel6lhr ~]$ cat /tmp/hhris.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 1-2,7-8

0001

SYS@ora10g> SELECT NLS_CHARSET_NAME(TO_NUMBER('0001','XXXX')) FROM DUAL;

 

NLS_CHARSET_NAME(TO_NUMBER('0001','XXXX'))

------------------------------------------------------------------------------------------------------------------------

US7ASCII

 

 

 

可以得出以下結論:

1、dmp文件是由10.02.01的客戶端導出的

2、基於HHRIS用戶導出

3、該用戶下有很多表

4、dmp文件的字符集是US7ASCII

1.5.2  找出dmp文件的DDL語句

主要查看是否有其它表空間導致不能導入的問題。

[oracle@rhel6lhr env_oracle]$ imp \'/ AS SYSDBA\' file=/tmp/hhris.dmp show=y log=/tmp/get_ddl.sql buffer=20480000  full=y

 

Import: Release 10.2.0.1.0 - Production on Tue May 9 14:06:22 2017

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

 

Export file created by EXPORT:V10.02.01 via direct path

 

Warning: the objects were exported by HHRIS, not by you

 

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

export client uses US7ASCII character set (possible charset conversion)

. importing HHRIS's objects into SYS

"BEGIN  "

"sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','"

《《《《。。。。。。。。篇幅原因,有省略。。。。。。。。》》》》

 

[oracle@rhel6lhr env_oracle]$ sh gettabdd.sh /tmp/get_ddl.sql > /tmp/gen_tabddl.sql

[oracle@rhel6lhr env_oracle]$ more  /tmp/gen_tabddl.sql

BEGIN 

sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'ORACLE', inst_scn=>'59161085');

COMMIT; END;

/

CREATE SEQUENCE "MICROSOFTSEQDTPROPERTIES" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 50 NOORDER NOCYCLE

/

CREATE SEQUENCE "R_REPORTLOG_LOGID" MINVALUE 1 MAXVALUE 100000 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER CYCLE

/

。。。。。。。。。。。。。

《《《《。。。。。。。。篇幅原因,有省略。。。。。。。。》》》》

 

 

 

查找關鍵字tablespace,發現只有1個表空間HHRIS

1.5.3  數據庫准備

dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \

-gdbname lhrdb  -sid lhrdb \

-sysPassword lhr -systemPassword lhr \

-datafileDestination '/cds/oradata' -recoveryAreaDestination '/cds/oradata' \

-storageType FS \

-characterset ZHS16GBK -nationalCharacterSet AL16UTF16 \

-sampleSchema false \

-memoryPercentage 20 \

-databaseType OLTP  \

-emConfiguration NONE

ORACLE_SID=lhrdb

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

sqlplus / as sysdba

CREATE TABLESPACE HHRIS DATAFILE '/cds/oradata/mydg/HHRIS01.dbf' size 1G;

create user hhris identified by lhr;

grant dba to hhris;

exit

imp  hhris/lhr   file=/tmp/hhris.dmp full=Y log=/tmp/log_imp_hhrisgbk.dmp

 

 

[oracle@rhel6lhr mydg]$ imp  hhris/lhr   file=/tmp/hhris.dmp full=Y log=/tmp/log_imp_hhrisgbk.dmp

 

Import: Release 10.2.0.1.0 - Production on Tue May 9 14:17:55 2017

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

 

Export file created by EXPORT:V10.02.01 via direct path

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

export client uses US7ASCII character set (possible charset conversion)

. importing HHRIS's objects into HHRIS

. . importing table                     "ADDTOHIS"          0 rows imported

. . importing table                      "APPOINT"          0 rows imported

. . importing table                "APPOINTDETAIL"          0 rows imported

. . importing table                "APPOINTMASTER"          0 rows imported

《《《《。。。。。。。。篇幅原因,有省略。。。。。。。。》》》》

 

Import terminated successfully with warnings.

[oracle@rhel6lhr mydg]$

[oracle@rhel6lhr mydg]$

 

 

可以成功導入,但是查詢的時候,有中文亂碼。

1.5.4  解決亂碼

使用UE或Pilotedit軟件,以16進制的格式打開dmp文件,修改dmp文件的第4行的第1-4個字節。

修改前:

wpsA251.tmp 

修改后:

wpsA252.tmp 

 

其實,也有資料顯示需要把第一行的第2和第3字節,第4行的第1-4字節全部修改掉,如下所示:

wpsA253.tmp 

經過小麥苗的測試,發現這3個地方全部修改掉,也可以成功導入。

 

修改后保存文件,上傳服務器,重新導入,導入后查詢,發現中文已經可以正常顯示了。

wpsA264.tmp 

1.5.5  還有一種不顯示亂碼的方式

還有一種不顯示亂碼的方式,那就是US7ASCII字符集的dmp文件導入到US7ASCII字符集的數據庫中

dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \

-gdbname lhrdb  -sid lhrdb \

-sysPassword lhr -systemPassword lhr \

-datafileDestination '/cds/oradata' -recoveryAreaDestination '/cds/oradata' \

-storageType FS \

-characterset US7ASCII -nationalCharacterSet AL16UTF16 \

-sampleSchema false \

-memoryPercentage 20 \

-databaseType OLTP  \

-emConfiguration NONE

 

 

export NLS_LANG=AMERICAN_AMERICA.US7ASCII

imp  hhris/lhr   file=/tmp/hhris.dmp full=Y log=/tmp/log_imp_hhrisgbk.dmp

 

導入后,在Windows上設置客戶端環境變量NLS_LANGAMERICAN_AMERICA.US7ASCII,然后重啟PL/SQL DEVELOPER軟件后就可以正常顯示中文了。

本來想着,這樣再采用GBK的字符集導出,然后導入GBK的數據庫中,結果發現這種方法行不通,始終有亂碼。其實,走到這一步,還可以將數據導出成文本格式的文件,然后將文本格式的文件再導入GBK字符集的數據庫中仍然是可行的。

1.6  本文總結

有種辦法處理將US7ASCII字符集的dmp文件導入到ZHS16GBK字符集的數據庫中的中文亂碼問題。第一,修改dmp文件中代表字符集的字符。第二,導入US7ASCII字符集的庫中,然后導出成文本格式,再導入到GBK的庫中。

1.7  參考

1.7.1  博客

 http://www.doc88.com/p-0863578397263.html

 http://www.eygle.com/archives/2004/09/nls_character_set_05.html

 http://www.itpub.net/thread-1129133-2-1.html

 http://www.itpub.net/thread-1014160-2-1.html

 http://blog.itpub.net/26736162/viewspace-2137132/

 http://blog.itpub.net/26736162/viewspace-1760580/

 http://blog.itpub.net/26736162/viewspace-1686082/

 【數據泵】EXPDP導出表結構(真實案例) http://blog.itpub.net/26736162/viewspace-1657828/、http://blog.itpub.net/26736162/viewspace-1662344/

 





About Me

...............................................................................................................................

● 本文作者:小麥苗,只專注於數據庫的技術,更注重技術的運用

● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/viewspace-2138791/

● 本文博客園地址:http://www.cnblogs.com/lhrbest/p/6832707.html

● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 數據庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯系我請加QQ好友(646634621),注明添加緣由

● 於 2017-05-09 09:00 ~ 2017-05-09 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的數據庫技術。


DBA筆試面試講解
歡迎與我聯系



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM