2012-11-22 3 views
0

Oracle 11g r2를 사용하고 언어 정렬을 사용하여 DB를 정렬하도록 구성하려고합니다.Oracle NLS_SORT가 시스템 레벨에서 작동하지 않습니다.

show parameters NLS_SORT; 
show parameters NLS_COMP; 

이 나에게 올바른 값을 표시 : 나는이 PARAMS을 확인 재시작 자 신탁을했습니다 후 나는

alter system set NLS_SORT='RUSSIAN' SCOPE=SPFILE; 
alter system set NLS_COMP='LINUGUISTIC' SCOPE=SPFILE; 

했다. 하지만 일종의

select name from test order by name; 

할 때 그것은 나에게 올바르지 않은 순서로 결과, 즉 숫자 첫째, 다음 편지를 보여줍니다.

하지만 난

alter session set nls_sort='RUSSIAN'; 
alter session set nls_comp='LINGUISTIC'; 
select name from test order by name; 

을 할 것입니다 경우 나에게 올바른 순서를 보여줍니다.

왜 sysem이 올바른 결과를 표시하지 않는지 알 수 있습니다.

답변

1

두 번째 "ALTER SYSTEM"명령 (LINGUISTIC 대신 LINUGUISTIC)에 오타가 있습니다.

실제 명령에이 오류가 없으면 클라이언트가 NLS 세션 매개 변수를 다른 것으로 설정하는지 확인합니다.

1

시스템 설정에 관계없이 응용 프로그램이 필요한 NLS 환경을 완벽하게 지정하도록 최선을 다할 것입니다. 새로 설치하거나 다른 시스템과 공유 할 수있는 여러 환경에서 응용 프로그램 코드를 지정해야하는 경우 특히 훨씬 강력합니다.

실제로 시스템 수준 환경 설정을 사용하지 않는 것이 좋을지도 모릅니다.

2

당신은 다른 수준 인스턴스/서버 초기화 파라미터로

  1. 에서 NLS 매개 변수를 설정할 수 있습니다.

    SQL> alter system set V$NLS_PARAMETER = 'XXX' scope = both; 
    
  2. 클라이언트의 환경 변수.

    % setenv NLS_SORT FRENCH 
    
  3. 마찬가지로 ALTER SESSION 매개 변수입니다.

    SQL> ALTER SESSION SET V$NLS_PARAMETER = = 'XXX' 
    

모든 설정은 높은 수준의 설정을 재정의합니다. 그래서 서버 쪽을 설정해도 모든 클라이언트가 연결하는 데 설정이 사용되는 것은 아닙니다.

모든 클라이언트 연결에 대해 설정되도록하려면 로그온 트리거를 사용하십시오. 그럼에도 사용자가 명시 적으로 '기본'설정을 무시할 수 있습니다.

2

세계화 설정의 우선 순위는 shown in the documentation입니다. 이 목록에서 '초기화 매개 변수 파일에 지정되었습니다'라는 우선 순위 4를 설정하고 있습니다. 우선 순위 1 ('SQL 함수에 명시 적으로 설정')을 설정하지 않고 우선 순위 2 ('ALTER SESSION 문으로 설정')를 설정할 때 원하는 결과를 얻습니다.귀하의 '올바르지 않은'명령이 우선 순위 3의 '환경 변수로 설정'의 영향을 받는다는 것을 나타내는 제거 프로세스.

select * from nls_session_parameters으로 세션에서 실제로 사용중인 값을 확인할 수 있습니다.

NLS_SORT 환경 변수가 아마도 직접 설정되지 않고 있습니다. 나는 NLS_LANG에서 파생 된 NLS_LANGUAGE에서 파생 된 것으로 의심됩니다. 운영 체제 환경에서이를 명시 적으로 설정하지 않으면 일반적으로 클라이언트가 운영 체제 로케일을 기반으로 설정합니다. 그러나 사용하는 정확한 클라이언트가 중요한 차이를 만들 수 있습니다. NLS_COMP 환경 변수를 명시 적으로 설정해야 할 수도 있습니다. 데이터베이스 기본값이 실제로 무시되는 경우입니다.

예를 들어, SQL Developer를 사용하면 환경 설정 (Tools-> Preferences-> Database-> NLS에서 액세스)에서 NLS 설정을 지정할 수 있습니다. Windows에서는 운영 체제 설정에 따라 기본값이 표시됩니다. SQL * Plus의 경우 운영 체제 환경 변수를 설정해야합니다.

이것은 또한 SQL Developer에서 실행될 때 질의가 올바른 순서를 제공한다는 것을 의미합니다. 예를 들어, 고유 한 로케일 설정이있는 JDBC를 통해 다른 곳에서 사용될 때 쿼리가 제대로 작동하지 않을 수 있습니다. 조심해야 할 것이 있습니다.

브 루트 포스 접근 방식은 alter session 명령을 로그인 트리거에 추가하는 것이지만 환경 구성을 마스킹하기 때문에 이상하지 않은 것으로 들립니다.

관련 문제