Oracle數據庫Linux下的導出EXP


先轉一篇

================================我是分割線================================

時間:2013-06-22 13:48來源:未知 作者:admin 點擊:次
$ exp username/password file=expdat.dmp tables=tablename 這是一條經歷了磨難的語句,然而最終也還是修成正果 最開始報錯: EXP-00008: ORACLE error 904 encountered ORA-00904: DBMS_JAVA.LONGNAME: invalid identifier Export terminated successfully
$ exp username/password file=expdat.dmp tables=tablename

這是一條經歷了磨難的語句,然而最終也還是修成正果 :)

最開始報錯:

EXP-00008: ORACLE error 904 encountered
ORA-00904: “DBMS_JAVA”.”LONGNAME”: invalid identifier
Export terminated successfully with warnings.

重新運行了$ORACLE_HOME/rdbms/admin/catexp.sql,無效,錯誤依舊。

*具體運行方法

[oracle@10 ~]$ sqlplus / as sysdba

連上db之后在里面通過執行sql郵件來使之生效

SQL>@/home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/catexp.sql 

(下同,略)

然后運行$ORACLE_HOME/javavm/install/initdbj.sql,重新創建dbms_java包,這個錯誤消失了。

我這邊遇到的情況驗證到這一步就解決了。

再次運行exp,報錯:

Export done in US7ASCII character set and UTF8 NCHAR character set
server uses UTF8 character set (possible charset conversion)

EXP-00008: ORACLE error 6552 encountered
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized
Export terminated successfully with warnings.

檢查系統環境,發現在props$中字符集是UTF8,但是操作系統環境變量沒有設置NLS_LANG,於是:
NLS_LANG=AMERICAN_AMERICA.UTF8;export NLS_LANG

再次運行exp,仍然報錯:

Export done in UTF8 character set and UTF8 NCHAR character set

EXP-00008: ORACLE error 6552 encountered
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized
Export terminated successfully with warnings.

於是詢問客戶是否有做過字符集的修改,果然,在很久很久以前,他們手動update props$表修改了字符集(手動修改props$是oracle7的招數,在oracle8和oracle9中雖然也能修改,但是會留下修改不干凈的隱患)

首先,確認字符集是否修改的不徹底。

SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
DECODE(TYPE#,
1,
DECODE(CHARSETFORM,
1,
'VARCHAR2',
2,
'NVARCHAR2',
'UNKOWN'),
9,
DECODE(CHARSETFORM,
1,
'VARCHAR',
2,
'NCHAR VARYING',
'UNKOWN'),
96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112,
DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
FROM SYS.COL$
WHERE CHARSETFORM IN (1, 2)
AND TYPE# IN (1, 9, 96, 112);

CHARACTERSET TYPES_USED_IN
-------------------- -------------
AL16UTF16 NCHAR
AL16UTF16 NCLOB
AL16UTF16 NVARCHAR2
UTF8 CHAR
UTF8 VARCHAR2
WE8ISO8859P1 CHAR
WE8ISO8859P1 CLOB
WE8ISO8859P1 VARCHAR2

8 rows selected.
確實在數據庫的列屬性中仍然存在着多個字符集的設定,這是導致exp失敗的原因。下面解決這個問題。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;


COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

--INTERNAL_USE是沒有寫在文檔中的參數,用以強制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;


SHUTDOWN IMMEDIATE;
STARTUP;
-- 再次啟動數據庫一遍
SHUTDOWN IMMEDIATE;
STARTUP;
按照上面的步驟,一步一步來,一步不要少,完成以后,重新檢索col$表。

CHARACTERSET TYPES_USED_IN
-------------------- -------------
UTF8 CHAR
UTF8 CLOB
UTF8 NCHAR
UTF8 NCLOB
UTF8 NVARCHAR2
UTF8 VARCHAR2
干凈了,再次運行exp,大功告成。

Export terminated successfully without warnings.

(責任編輯:admin)

================================我是分割線================================

然后有個問題不曉得是不是不正常,我這邊在命令行里面直接寫

exp usernam/pwd@dbname file=file.dmp

或exp usernam/pwd@dbname

的時候會出錯。

Export: Release 11.2.0.1.0 - Production on Fri Sep 26 11:05:43 2014

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


EXP-00056: ORACLE error 12154 encountered
ORA-12154: TNS:could not resolve the connect identifier specified
EXP-00000: Export terminated unsuccessfully

於是我嘗試寫了exp,就可以正常進行了。然后出現的一系列內容的填寫。

[oracle@10 ~]$ exp

Export: Release 11.2.0.1.0 - Production on Fri Sep 26 11:16:30 2014

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


Username: opr001
Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Enter array fetch buffer size: 4096 >【回車】------選擇默認的情況下,直接回車就行了,下同

Export file: expdat.dmp > test0926.dmp

(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 2  *這里我隨便選了2,自己按需選擇順序或者寫縮寫(E,U,T)

Export grants (yes/no): yes >【回車】------默認是yes

Export table data (yes/no): yes >【回車】------默認是yes

Compress extents (yes/no): yes >【回車】------默認是yes

Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses JA16SJIS character set (possible charset conversion)

About to export specified users ...
User to be exported: (RETURN to quit) > .. *這里一般默認寫上兩個點【..】

Export terminated successfully without warnings.

完了導出成功,在oracle_home下找到剛才的dmp文件。

*oracle_home為自定義環境變量或者叫安裝目錄吧,同windows系統下面的概念。

  我這邊的oracle_home為:/home/oracle/app/oracle/product/11.2.0/


免責聲明!

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



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