RDBMS/ORACLE & TIBERO

ORACLE USER 생성 오류 (ORA-65096: invalid common user or role name)

junsuyoun 2022. 11. 4. 10:12
728x90
반응형

ORACLE 테스트 중 유저 생성을 하게 되면 ORA-65096 에러를 만나게 되는 경우가 있습니다.

SQL> create user test_user1 identified by test;
create user test_user1 identified by test
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

SQL> create user "test_user2" identified by test;
create user "test_user2" identified by test
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

ORACLE 유저 생성 시 12버전 이상 부터 "Multitenant Architecture" 추가 되면서 유저 생성 하는 방법이 달라졌다.

SQL> create user c##test_user1 identified by test;

User created.

유저명 앞에 c##을 붙여줘야 만들어진다. (Multitenant개념의 CDB#ROOT 때문)

SQL> alter session set "_ORACLE_SCRIPT"=true;

Session altered.

SQL> create user test_user1 identified by test;

User created.

"_ORACLE_SCRIPT"=true 파라미터를 세션 파라미터로 사용하여 유저를 만들면 됩니다.

 

다만, "_ORACLE_SCRIPT"=true로 만들어진 테이블 들에 대해서는 dba_objects에 ORACLE_MAINTAINED 컬럼 값이 Y로 설정 됩니다. 해당 컬럼 값은 테이블의 DDL 값을 뽑아내여 재사용할 시 주의해야 합니다.

 

 

Be aware when you use _ORACLE_SCRIPT in scripts

Recently I came across this when I gave a Multitenant workshop at a German customer. As part of the workshop I explained the _ORACLE_SCRIPT statements you will find in almost all scripts in ?/rdbms…

mikedietrichde.com

SQL> alter session set "_ORACLE_SCRIPT"=false;
CREATE TABLE test_user1.tbl2(col1 number);
CREATE TABLE c##test_user2.tbl2(col1 number);

SQL> SET LINESIZE 150
COL owner for a30
COL object_name for a30
COL object_type for a30
COL oracle_maintained for a30
select owner, object_name, object_type, oracle_maintained from dba_objects where object_name in ('TBL1','TBL2','TBL3','TBL4') order by owner desc;

OWNER			       OBJECT_NAME		      OBJECT_TYPE		     ORACLE_MAINTAINED
------------------------------ ------------------------------ ------------------------------ ------------------------------
TEST_USER1		       TBL2			      TABLE			     N
C##TEST_USER2		       TBL2			      TABLE			     N

SQL> alter session set "_ORACLE_SCRIPT"=true;
CREATE TABLE test_user1.tbl1(col1 number);
CREATE TABLE c##test_user2.tbl1(col1 number);

SQL> SET LINESIZE 150
COL owner for a30
COL object_name for a30
COL object_type for a30
COL oracle_maintained for a30
select owner, object_name, object_type, oracle_maintained from dba_objects where object_name in ('TBL1','TBL2','TBL3','TBL4') order by owner desc;

OWNER			       OBJECT_NAME		      OBJECT_TYPE		     ORACLE_MAINTAINED
------------------------------ ------------------------------ ------------------------------ ------------------------------
TEST_USER1		       TBL2			      TABLE			     N
TEST_USER1		       TBL1			      TABLE			     Y
C##TEST_USER2		       TBL2			      TABLE			     N
C##TEST_USER2		       TBL1			      TABLE			     Y


 

728x90
반응형