오류 : ORA-65096 : 오라클의 공용 사용자 또는 역할 이름이 잘못되었습니다.


118

방금 oracle11g를 설치했는데 Scott 스키마가 누락되었습니다. 그래서 나는 그것을 직접 생성하려고 노력하고 있습니다. "Scott"스키마의 SQL 스크립트를 받았지만 "타이거가 식별 한 사용자 Scott 생성"이라는 쿼리를 실행하려고하면 다음 오류가 표시됩니다.

ORA-65096 : 오라클의 공용 사용자 또는 역할 이름이 잘못되었습니다.

기본적으로 "Scott"사용자를 만들 수 없습니다. 그 이유는 무엇이며 어떻게 문제를 해결할 수 있습니까?


8
그것은 불가능합니다 11g, 당신은 있어야합니다 12c.
Lalit Kumar B

11g 클라이언트를 설치했지만 12c 데이터베이스에 연결하고 있습니까? 정확히 무엇을 설치 했습니까?
Alex Poole

1
사용자 이름 앞에 C ##을 추가합니다.
Sathvik

답변:


344

위험

이와 같이 문서화되지 않은 매개 변수 설정 (선행 밑줄로 표시됨)은 Oracle Support의 지시에 따라 수행되어야합니다. 그러한 지침없이 이러한 매개 변수를 변경하면 지원 계약이 무효화 될 수 있습니다. 따라서 자신의 책임하에 수행하십시오.

특히를 설정하면 "_ORACLE_SCRIPT"=trueORACLE_MAINTAINED 열이 'Y'로 설정된 일부 데이터 사전이 변경됩니다. 이러한 사용자 및 개체는 일부 DBA 스크립트에서 잘못 제외됩니다. 또한 일부 시스템 스크립트에 잘못 포함될 수 있습니다.

위의 위험에 동의하고 일반적인 사용자를 올바른 방법으로 만들고 싶지 않은 경우 아래 답변을 사용하십시오.


사용자를 만들기 전에 다음을 실행하십시오.

alter session set "_ORACLE_SCRIPT"=true;  

여기서 답을 찾았습니다


6
주의, 그것은이다 숨겨진 매개 변수 와 Oracle 지원에서 권장하는 경우에만 사용합니다.
Lalit Kumar B

5
프로덕션 시스템에서 밑줄 (숨겨진) 매개 변수를 사용하면 지원 계약이 무효화 될 수 있으므로 위험합니다. 따라서 적절한 경고를하지 않고 설정하도록 사람들에게 조언해야합니다.
APC

3
이것은 잘못되었고 오라클에서 지원되지 않습니다. 나는 그것을 사용했고 또 다른 내부 문제를 일으켰습니다.
Firas Nizam

1
Oracle Database 18c Express Edition Release 18.0.0.0.0-Production
Vitalie

2
@Victor-Oracle Support에서 지시 한 경우에만 변경할 수 있기 때문입니다. 내가 말했듯이 문서화되지 않은 매개 변수를 우리 자신의 방망이에서 설정하면 지원 계약이 무효화 될 수 있습니다. 보다 일반적으로 문서화 및 문서화되지 않은 매개 변수에 대한 Oracle의 기본 설정은 일반적으로 모든 애플리케이션에 적합하며 변경할 필요가 없습니다. 언더 스코어 매개 변수를 조정하는 것은 비전 액세스의 스릴을 즐기는 사람들에게 호소력이 있으며, 이는 조정해야하는 최악의 이유입니다. 그러나 걱정할 지원 계약이없는 경우 원하는 방식으로 시스템을 손상시킬 위험이 있습니다. ;-)
APC

55

방금 oracle11g를 설치했습니다.

ORA-65096 : 오라클의 공용 사용자 또는 역할 이름이 잘못되었습니다.

아니요, Oracle 12c를 설치했습니다 . 이 오류는에만있을 12c수 있으며에는있을 수 없습니다 11g.

항상 소수점 이하 4 자리까지 데이터베이스 버전을 확인하십시오 .

SELECT banner FROM v$version WHERE ROWNUM = 1;

Oracle 12c 다중 테넌트 컨테이너 데이터베이스 에는 다음이 있습니다.

  • 루트 컨테이너 ( CDB )
  • 및 / 또는 0 개, 1 개 또는 다수의 플러그 형 데이터베이스 ( PDB ).

컨테이너 데이터베이스 로 데이터베이스를 만들어야 합니다 . 컨테이너에 사용자 (예 : CDB $ ROOT) 를 만들려고 하지만 PLUGGABLE 데이터베이스에 사용자를 만들어야 합니다 .

컨테이너에 응용 프로그램 관련 개체를 생성해서는 안되며 컨테이너는 플러그 가능한 데이터베이스에 대한 메타 데이터를 보유합니다. 일반적인 데이터베이스 작업에는 플러그 형 데이터베이스를 사용해야합니다. 그렇지 않으면 컨테이너로 생성하지 말고 멀티 테넌시를 사용하지 마십시오 . 그러나 12cR2 이후로는 컨테이너가 아닌 데이터베이스를 만들 수 없습니다.

그리고 대부분의 경우 샘플 스키마 가 이미 설치되어있을 수 있으므로 플러그 가능한 데이터베이스에서 잠금해제 하기 만하면 됩니다.

예를 들어 다음과 같이 플러그 형 데이터베이스를 생성 한 경우 pdborcl:

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"

PDB를 표시하고 루트 컨테이너에서 플러그 가능한 데이터베이스에 연결하려면 :

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

Oracle 12c 설치 후 필수 단계 읽기를 제안합니다.


참고 : _ORACLE_SCRIPThidden 매개 변수를 사용하여 true로 설정하도록 제안하는 답변 은 프로덕션 시스템에서 위험하며 지원 계약을 무효화 할 수도 있습니다. Oracle 지원에 문의하지 않고 숨겨진 매개 변수를 사용하지 마십시오 .


위의 "Oracle 12c 설치 후 필수 단계"링크가 손상되었습니다. 새 링크 : docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri 확실합니까? 제대로 작동하기 때문에 Oracle 12c 설치 후 필수 단계
Lalit Kumar B

47

Oracle 12c 이상에는 두 가지 유형의 데이터베이스가 있습니다.

  1. 컨테이너 데이터베이스 (CDB) 및
  2. 플러그 형 데이터베이스 (PDB).

사용자를 생성하려는 경우 두 가지 가능성이 있습니다.

  1. "일반 사용자"라고도하는 "컨테이너 사용자"를 만들 수 있습니다.
    일반 사용자는 현재 및 미래의 PDB뿐만 아니라 CBD에 속합니다. 이는 할당 된 권한에 따라 Container DB 또는 Pluggable DB에서 작업을 수행 할 수 있음을 의미합니다.

    create user c##username identified by password;

  2. "로컬 사용자"라고도하는 "플러그 가능한 사용자"를 만들 수 있습니다.
    로컬 사용자는 단일 PDB에만 속합니다. 이러한 사용자에게는 관리 권한이 부여 될 수 있지만 자신이 존재하는 PDB에 대해서만 가능합니다. 이를 위해 다음과 같이 플러그 형 데이터 블에 연결해야합니다.

    alter session set container = nameofyourpluggabledatabase;

    보통 다음과 같이 사용자를 만들 수 있습니다.

    create user username identified by password;

사용할 테이블 스페이스를 지정하는 것을 잊지 마십시오. DB 가져 오기 / 내보내기 중에 유용 할 수 있습니다. 자세한 내용은 https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503을 참조하십시오.


이 답변의 스타일은 제가 가장 좋아하고 사용하기 쉽습니다.
Zhiyong

0

세션 세트 변경 "_ORACLE_SCRIPT"= true;

"Chutinhbk123 @!"로 식별되는 사용자 sec_admin을 생성합니다.


-1

데이터베이스 연결 도구에 대한 사용자 종속성 생성

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer

3
코드의 형식을 올바르게 지정하고 다른 답변보다 문제가 더 잘 해결되는 이유를 알려주시겠습니까?
Nico Haase 2018 년

-1

수 있습니다, 더 안전한 대안은 "_ORACLE_SCRIPT"=true변경할 수 있습니다 "_common_user_prefix"에서 C##빈 문자열. null 인 경우 모든 이름을 일반 사용자에게 사용할 수 있습니다. 거기 에서 찾았 습니다 .

해당 값을 변경하는 동안 다른 문제 (ORA-02095)에 직면 할 수 있습니다. 매개 변수는 수정할 수 없으며 구성 ( 소스 ) 에 따라 여러 가지 방법으로 수정할 수 있습니다 .

그래서 나를 위해 일했습니다.

alter system set _common_user_prefix = ''; scope=spfile;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.