Archive for June, 2007

Jun 13 2007

OTN CN更新Oracle ACE资料

Published by kamus under Oracle RDBMS

终于OTN中文页面中也更新了Oracle ACE的资料,跟OTN英文页面有不同的布局,将中国的 Oracle ACE单独排列出来,更加醒目了。

BTW:恭喜eygle的第一部视频教学《Oracle 数据库 10g — 开启全方位性能优化的时代》 发布在OTN中文首页上。

One response so far

Jun 12 2007

耳钉

Published by kamus under Feeling

人的身体是自己掌握的,自残也是一种选择 :)

No Tags

11 responses so far

Jun 11 2007

How to access Flickr!

Published by kamus under Webs

不知道Flickr怎么惹到伟大的GFW了,瞬间所有图片都无法正常浏览,朋友中有刚购买了Flickr Pro的无一不捶胸顿足。

如果你在使用Firefox浏览器,那么现在有一个插件 - Access Flickr!可以帮助你绕过GFW来浏览Flickr中的图片,这是一位伊朗的Flickr爱好者制作的,因为早前在伊朗和阿联酋都对Flickr进行过封锁。

No responses yet

Jun 02 2007

EXP错误逐个击溃

Published by kamus under Oracle RDBMS

$ 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_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中虽然也能修改,但是会留下修改不干净的隐患)

首先,确认字符集是否修改的不彻底。

  1. SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
  2.                 DECODE(TYPE#,
  3.                        1,
  4.                        DECODE(CHARSETFORM,
  5.                               1,
  6.                               'VARCHAR2',
  7.                               2,
  8.                               'NVARCHAR2',
  9.                               'UNKOWN'),
  10.                        9,
  11.                        DECODE(CHARSETFORM,
  12.                               1,
  13.                               'VARCHAR',
  14.                               2,
  15.                               'NCHAR VARYING',
  16.                               'UNKOWN'),
  17.                        96,
  18.                        DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
  19.                        112,
  20.                        DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
  21.   FROM SYS.COL$
  22.  WHERE CHARSETFORM IN (1, 2)
  23.    AND TYPE# IN (1, 9, 96, 112);
  24.  
  25. CHARACTERSET         TYPES_USED_IN
  26. -------------------- -------------
  27. AL16UTF16            NCHAR
  28. AL16UTF16            NCLOB
  29. AL16UTF16            NVARCHAR2
  30. UTF8                 CHAR
  31. UTF8                 VARCHAR2
  32. WE8ISO8859P1         CHAR
  33. WE8ISO8859P1         CLOB
  34. WE8ISO8859P1         VARCHAR2
  35.  
  36. 8 rows selected.

确实在数据库的列属性中仍然存在着多个字符集的设定,这是导致exp失败的原因。下面解决这个问题。

  1. SHUTDOWN IMMEDIATE;
  2. STARTUP MOUNT;
  3. ALTER SYSTEM ENABLE RESTRICTED SESSION;
  4. ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  5. ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  6. ALTER DATABASE OPEN;
  7.  
  8.  
  9. COL VALUE NEW_VALUE CHARSET
  10. SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
  11. COL VALUE NEW_VALUE NCHARSET
  12. SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
  13.  
  14. --INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
  15. ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
  16. ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
  17.  
  18.  
  19. SHUTDOWN IMMEDIATE;
  20. STARTUP;
  21. -- 再次启动数据库一遍
  22. SHUTDOWN IMMEDIATE;
  23. STARTUP;

按照上面的步骤,一步一步来,一步不要少,完成以后,重新检索col$表。

  1. CHARACTERSET         TYPES_USED_IN
  2. -------------------- -------------
  3. UTF8                 CHAR
  4. UTF8                 CLOB
  5. UTF8                 NCHAR                         
  6. UTF8                 NCLOB
  7. UTF8                 NVARCHAR2
  8. UTF8                 VARCHAR2

干净了,再次运行exp,大功告成。

Export terminated successfully without warnings.

No Tags

18 responses so far

Page 2 of 3«123»