My Oracle Support Banner

8i, 9i , 10g, 11g 버전에서 NLS_CHARACTERSET 을 AL32UTF8 / UTF8 (Unicode) 로의 변경 (Doc ID 2231857.1)

Last updated on FEBRUARY 22, 2019

적용 대상:

Oracle Database - Enterprise Edition - 버전 8.0.3.0 to 11.2.0.4 [릴리즈 8.0.3 to 11.2]
Oracle Database - Standard Edition - 버전 8.0.3.0 to 11.2.0.4 [릴리즈 8.0.3 to 11.2]
Oracle Database Cloud Schema Service - 버전 N/A 과(와) 그 후속
Oracle Database Exadata Cloud Machine - 버전 N/A 과(와) 그 후속
Oracle Cloud Infrastructure - Database Service - 버전 N/A 과(와) 그 후속
이 문서의 내용은 모든 플랫폼에 적용됩니다.

목적

 

"csalert 가 작동하지 않습니다" 또는 "캐릭터셋 변경이 작동하지 않습니다"와 관련되어 로깅된 SR 대부분은 본 노트의 과정을 따르지 않았기 때문에 단순합니다.
본 노트는 다소 길지만 알려진 모든 문제를 확인하고 어떤 개체가 올바른 전환이 가능하도록 조치가 필요한지 설명하는 것입니다.
노트를 따라주시고 섹션에 대해 건너뛰지 마십시오. 제공되는 경우, 어떤 개체가 어떤 행동을 취해야하는지 명확하게 알 수 있도록 선택하십시오.
본 노트는 "정확한 단계" 입니다.


10g 와 11g 에서는 Csalter (또는 DMU 툴) 을 사용할 필요가 있습니다.
12c 에서는 DMU 툴을 사용할 필요가 있습니다.
10g, 11g, 12c 에서 AL32UTF8 또는 UTF8 로 변경하기 위해 "Alter database character set" 구문은 절대로 사용하지 마십시오.
10g, 11g, 12c 에서 UTF8 또는 AL32UTF8 로 변경하기 위해 "Alter database character set" 을 사용하는 것은 최소(!) 데이터 사전 객체들과 대부분의 사용자 데이터 또한 손상시킬 것입니다.

10g, 11g, 12c 에서 AL32UTF8 또는 UTF8 로 변경하기 위해 "Alter database character set" 가 사용된다면 단순히 수행될 수 있는 방법은 백업을 통한 복구입니다.

12c 이후로는 DMU 만이 유니코드로의 마이그레이션을 위한 가능한 도구립니다. <Note 1272374.1> The Database Migration Assistant for Unicode (DMU) Tool

  
이 노트는 데이터베이스(서버단) 자체적인 변경만을 다룰 것입니다.
8i ( 8.1.7 이하) 에서는 AL32UTF8 을 이용하실 수 없습니다. 대신 UTF8 을 사용해 주십시오.

유니코드(AL32UTF8 / UTF8) 데이터베이스를 사용하기 위해 어플리케이션이 유니코드 데이터베이스를 사용하는 것을 지원하는지 확인하실 필요가 있습니다. 이 부분은 오라클 데이터베이스 서포트에서 "확인" 또는 "확정" 할 수 없습니다.
어플리케이션 문서를 참고하시거나 어플리케이션이 NLS_CHARACTERSET 으로써 AL32UTF8 또는 UTF8 과 작동하는 것이 인증되어 있는지 확인하기 위해 어플리케이션 벤더 / 지원 팀에 문의 하십시오.
AL32UTF8 로 변경할 때 클라이언트와 어플리케이션 단에서의 더 많은 부분을 위해서는 다음 문서를 참고해 주십시오. <Note 788156.1> AL32UTF8 / UTF8 (Unicode) Database Character Set Implications

강하게 권고합니다:

이 노트는 NLS_CHARACTERSET에서 AL32UTF8 / UTF8로 이동하는 데 사용될 수 있습니다. (또한 UTF8에서 AL32UTF8 (또는 역으로)로 이동하는 데 사용될 수 있음을 의미).

이 노트는 다른 문자 세트 (예 : UTF8)로 이동하기 위해 AL32UTF8을 사용하여 작성되며, 9i 이하에서는 CSSCAN TOCHAR에서 "AL32UTF8"을 "UTF8"로 바꾸고 "alter database character set" 명령으로 대체합니다

이 "흐름"은 단일 바이트 문자 집합 (US7ASCII, WE8DEC 등)에서 다른 다중 바이트 문자 집합 (ZHS16GBK, ZHT16MSWIN950, ZHT16HKSCS, ZHT16HKSCS31, KO16MSWIN949, JA16SJIS ...)으로 이동하는 데에도 사용할 수 있습니다. AL32UTF8을 xx16xxxx 타겟 캐릭터 셋. 그러나 이 경우 AL32UTF8을 사용하면 훨씬 더 좋은 아이디어가됩니다. <Note 333489.1> Choosing a database character set means choosing Unicode.

 

범위

현재의 NLS_CHARACTERSET 를 AL32UTF8 / UTF8 또는 다른 멀티바이트 캐릭터셋으로 변경하는 DBA 
이 노트에서는 AL32UTF8 이 사용될 것입니다. 그러나 UTF8 (8i 에서는 AL32UTF8 대신 사용되는) 또는 다른 멀티바이트 캐릭터셋 또한 적용 가능합니다.

현재 NLS_CHARACTERSET 는 NLS_DATABASE_PARAMETERS 에서 보여집니다.

Sqlplus / as sysdba
SELECT value FROM NLS_DATABASE_PARAMETERS WHERE parameter='NLS_CHARACTERSET'
/

NLS_CHARACTERSET 은 CHAR, VARCHAR2, LONG, CLOB 데이터타입의 캐릭터셋을 정의합니다.

상세 내역

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


이 문서에서
목적
범위
상세 내역
 1) AL32UTF8 로 가는 일반적인 발언
 1.a) 선수 조건:
 1.b) Oracle Applications Database 또는 Peoplesoft 데이터베이스를 변경할 때 :
 1.c) (전체) 익스포트 / 임포트를 언제 사용하고 데이터베이스 문자 세트 / Csalter를 언제 사용할 수 있습니까?
 1.d) Expdp / Impdp (DataPump)를 사용할 때
 1.e) 9i 에서 Alter Database Character Set 사용할 때
 1.f) 물리적 / 논리적 스탠바이 데이터베이스는 어떻습니까?
 1.G) 이 노트의 단계들을 어떻게 테스트 할 것인가?
 2) 불필요하거나 문제가되는 오브젝트가 있는지 소스 데이터베이스를 점검하십시오.
 2.a) 잘못된 개체.
 2.b) 고아 Datapump 마스터 테이블 (10g 이상)
 2.c) 불필요한 샘플 스키마 / 사용자.
 2.d) 데이터베이스가 양호한 상태인지 확인하십시오.
 3) 소스 데이터베이스에서 "Lossy"(현재 소스 문자 세트의 유효하지 않은 코드 포인트)를 점검하십시오.
 3.a) 'lossy' 데이터를 구하는 방법
 3.b) "lossy"사용자 / 응용 프로그램 데이터를 다른 방법으로 해결할 수 있습니까?
 4) AL32UTF8 로 갈때 "Convertible" 와 "Truncation" 를 위한 확인
 5) "Truncation" 데이터 다루기
 5a) 또는 익스포트 전에 데이터를 줄이십시오
 5b) 또는 데이터 확장에 맞게 열을 조정
 6) "Convertible" 데이터 다루기
 6.a) "Convertible" 어플리케이션 데이터:
 6.b) 데이터 사전 개체의 "Convertible"데이터 :
 7) Csalter / Alter Database Character Set 사용하기 전에 database 에서 체크해야할 부분
 7.a) CHAR 의미 체계를 사용하는 파티션 - AL32UTF8 변경 동안 ORA-14265: data type or length of a table subpartitioning column may not be changed" 또는 " ORA-14060: data type or length of a table partitioning column may not be changed"
 7.b) CHAR 의미 체계 컬럼들에서 함수 또는 도메인 또는 조인된 인덱스
 7.b.1) CHAR 의미 체계를 사용하는 컬럼에서 함수 또는 도메인 인덱스 - "ORA-30556: functional index is defined on the column to be modified" 또는 "ORA-02262: ORA-904 occurs while type-checking column default value expression" during the change to AL32UTF8
 7.b.2) CHAR 의미 체계를 사용하는 컬럼들 간의 조인 인덱스 - AL32UTF8 로의 변경 도중 "ORA-54028: cannot change the HIDDEN/VISIBLE property of a virtual column"
 7.c) CHAR 의미 체계를 사용하는 테이블에서 DEFAULT  값 절에서 SYSTIMESTAMP - AL32UTF8 로 변경 동안 " ORA-604 error occurred at recursive SQL level %s , ORA-1866 the datetime class is invalid"
 7.d) CHAR 의미 체계를 사용하는 Cluster - AL32UTF8 변경 동안  "ORA-01447: ALTER TABLE does not operate on clustered columns"
 7.e) CHAR 의미 체계를 사용하는 Unused 컬럼들 - AL32UTF8 변경 동안 "ORA-00604: error occurred at recursive SQL level 1" / "ORA-00904: "SYS_C00002_09031813:50:03$": invalid identifier"
 7.f) Check that you have enough room to run Csalter or to import the "Convertible" data again afterwards.
 7.g) (10g 와11g) recyclebin 의 객체 - AL32UTF8 로의 변경 동안 "ORA-38301 can not perform DDL/DML over objects in Recycle Bin"
 7.i) compatible 파라미터가 기본 버전으로 설정되었는지 확인
 7.i) Oracle 11.2.0.3 , 11.2.0.2, 11.2.0.1 , 11.1.0.7 , 11.1.0.6  : SQL plan baseline 과 profile 을 확인하십시오.
 7.j) CHAR semantics 를 사용하는 임시 테이블- AL32UTF8 로 변경하는 동안 " ORA-14450: attempt to access a transactional temp table already in use"
 8) "Lossy" 가 해결된 후 "Truncation" 데이터는 처리되고 "Convertible"은 익스포트 / 잘림 / 처리되고 포인트 7) 은 괜찮은 것입니다. 최종 확인으로 Csscan이 다시 실행하십시오.
 8.a) 8i / 9i의 경우 Csscan 출력은 모든 CHAR, VARCHAR2, CLOB 및 LONG 데이터 (데이터 사전 및 사용자 / 응용 프로그램 데이터)에 대해 "Changeless"여야합니다 (= 10.a로 이동하기 전에 =)).
 8.b) 10g 및 11g의 경우 Csscan 출력은 (= 10.b로 이동하기 전에 =) 필요합니다.
 9) Alter Database Character Set / Csalter를 사용하는 데 필요한 단계 요약 :
 9.a) 9i 이하 :
 9.b) 10g 및 11g의 경우 :
 10) Csalter (10g 및 11g) 또는 Alter Database Character Set (8i 및 9i) 실행
 10.a) 8i 및 9i 전용 단계 - 10g 또는 11g에서 사용하지 마십시오.
 10.b) 버전 10g 및 11g의 단계
 10.c) Csalter / alter database 출력과 alert.log에서 오류를 확인하십시오. 일부 Csalter 메시지에는 ORA 번호가 없습니다.
 11) (10g 및 11g) 10g 이상에서 AL32UTF8로 변경 한 후 데이터 펌프 패키지를 다시로드하십시오.
 12) 내보낸 데이터를 다시 데이터베이스로 임포트하십시오.
 12.a) Csalter / Alter 데이터베이스를 사용하여 AL32UTF8로 이동되고 csscan에 "Truncation"데이터가 4 번 지점에서 완료되었을 때.
 12.b) 새 / 다른 AL32UTF8 데이터베이스로 이동하기 위해 (전체) 내보내기 / 가져 오기를 사용하고 csscan에 "Truncation"데이터가 4 번 지점에서 완료되었을 때.
 12.c) Csalter / Alter 데이터베이스를 사용하여 AL32UTF8로 이동할 때 "Truncation"데이터가 없었을 때 csscan의 "Convertible"및 "Changeless"만 4 번 지점에서 수행된 경우:
 12.d) 새로운 / 다른 AL32UTF8 데이터베이스로 이동하기 위해 (전체) export / import 를 사용할 때 포인트 4에서 수행 된 csscan에서 "Truncate"데이터가 없고,  "Convertible"및 "Changeless"만 있는 경우 :
 13) 데이터 및 최종 내용 확인 :
참고

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.