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

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

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

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



답변

위험

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

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

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


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

alter session set "_ORACLE_SCRIPT"=true;  

여기서 답을 찾았습니다


답변

방금 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 이상에는 두 가지 유형의 데이터베이스가 있습니다.

  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을 참조하십시오.


답변

세션 세트 변경 “_ORACLE_SCRIPT”= true;

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


답변

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

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


답변

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

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

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

alter system set _common_user_prefix = ''; scope=spfile;


답변