Oracle 12c ile bilirkte container database kurulumu yaptıysanız artık yeni yapıda daha önceki versiyonlarda almadığınız bir takım hatalar alabilirsiniz. Örneğin 11g ve öncesinde çok basit bir user create işlemi olan aşağıdaki komut artık 12c ile birlikte aşağıdaki hatayı verir oldu.
12c ile birlikte yapı değiştiğinden dolayı artık create etmeye çalışılan user hangi pluggable database altına create edilecekse öncesinde bunu set etmemiz gerekiyor. Aslında bu hatanın bikaç tane çözüm yolu var öncesinde en optimum çözümden bahsedelim;
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						[oracle@Redhat70 ~]$ sqlplus / as sysdba  SQL*Plus: Release 12.1.0.2.0 Production on Tue May 12 09:32:55 2015 Copyright (c) 1982, 2014, Oracle.  All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> create user kamil identified by kamil ;  create user kamil identified by kamil             * ERROR at line 1: ORA-65096: invalid common user or role name  | 
					
Öncelikle kurmuş olduğumuz database içerisindeki tüm servisleri select edelim ;
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						SQL> SELECT NAME, PDB FROM V$SERVICES   ORDER BY PDB, NAME; NAME                                                          PDB -----------------------------------------------		      ---------- SYS$BACKGROUND                                                  CDB$ROOT SYS$USERS                                                      	CDB$ROOT t1                                                              CDB$ROOT t1XDB                                                           CDB$ROOT pdbt11                                                            PDBT11 pdbt12                                                            PDBT12  | 
					
t1 database’ ine user create edeceksek username başına c## ekleyerek userı create etmek gerekir. (t1 bir pluggable database olmadığından dolayı) ;
SQL> create user c##kamil identified by kamil ;
User created.
Şu anda hangi container’ da olduğumuzu da sorgularsak ;
SQL>show con_name
CON_NAME
——————————
CDB$ROOT
SQL>
Eğer pluggable database’ lerden birine user create etmeniz gerekiyorsa da örneğin ;
| 
					 1 2 3 4 5 6 7  | 
						SQL> select con_id, dbid, name,open_mode  from V$PDBS; CON_ID		DBID 		NAME                      OPEN_MODE ---------- 	---------- 	------------------- 	  ----------          2 	3005292840 	PDB$SEED                  READ ONLY          3   	67840626 	PDBT11                    MOUNTED          4 	3755278152 	PDBT12                    MOUNTED  | 
					
Pdbt12 pluggable database’ ine de bir test userı oluşturalım ;
SQL> alter session set container=PDBT12;
Session altered.
SQL> ALTER PLUGGABLE DATABASE pdbt12 OPEN;
Pluggable database altered.
SQL> create user kamil identified by kamil;
User created. 
Şimdi database’ deki test adı ile başlayan userları select ettiğimiz de ;
| 
					 1 2 3 4 5  | 
						SQL> select username from dba_users where username like '%KAMIL%'; USERNAME -------------------------------------------------------------------------------- KAMIL C##KAMIL  | 
					
Hem local pluggable database de KAMIL adı altında bir user olduğunu hemde ortak database’ deki KAMIL userını görebiliriz. C##ile başlayan userlar container database’ inde tanımlı olan userları kastetmektedir.
Bu hatayı gidermenin 2. yöntemi ise ;
Aşağıdaki oracle hidden parametresi alter edilerek true olarak set edildiğinde c## prefix’ sine gerek olmadan komutumuz olduğu gibi çalışacaktır ;
SQL> alter session set “_ORACLE_SCRIPT”=true;
Session altered.
SQL> create user test identified by test ;
User created.
Ancak bu şekilde yapılması çok önerilmez sonuçada create edilmeye çalışılan userın hangi db altına olacağının set edilmesi sonrasında yaşanacak olan karışıklığında önüne geçecektir.
User create edilme işlemi ile ilgili olarak aşağıdaki gibi create edilmeye çalışılması durumunda da benzer hata alınacaktır ;
| 
					 1 2 3 4 5  | 
						SQL> create user test2 identified by test2 container=current; create user test2 identified by test2 container=current                                 * ERROR at line 1: ORA-65049: creation of local user or role is not allowed in CDB$ROOT  | 
					
Benzer şekilde;
| 
					 1 2 3 4 5  | 
						SQL> create user test2 identified by test2 container=all; create user test2 identified by test2 container=all             * ERROR at line 1: ORA-65096: invalid common user or role name  | 
					
Bu hataların da çözümü yukarıda belirtmiş olduğum açıklama ile aynı şekilde çözülecektir. Mantık aynı aslında ortak database yani container db’ ye user create ediliyorsanız mutlaka c## prefix’ ini kullanmanız gerekir, userı pluggable database’ e oluşturacaksanız da öncesinde mutlaka hangi pluggable database’ de çalışacaksanız onu set etmeniz (örneğin; alter session set container=pdbt12) gerekiyor.
	
			

		  