English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
先说基本用法:
先按11G之前进行
conn / as sysdba;
create user test identified by test;
ORA-65096: 公用用户名或角色名无效.
查官方文档得知“试图创建一个通用用户,必需要用C##或者c##开头”,这时候心里会有疑问,什么是common user?不管先建成功了再说
create C##user test identified by test;
创建成功
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
select con_id, dbid, NAME, OPEN_MODE from v$pdbs;
CON_ID DBID NAME OPEN_MODE
---------- ---------- ------------------------------ ----------
2 4066409480 PDB$SEED READ ONLY
3 2270995695 PDBORCL MOUNTED
SQL>alter session set container=PDBORCL;
في هذه الحالة، يمكنك استخدام الأمر create user test identified by test; لإنشاء المستخدم.
CDB و PDB هي ميزة جديدة ومشرقة في ORACLE 12C، وقد أدت إدخالها إلى تغيير كبير في مفاهيم إدارة قواعد البيانات التقليدية، حيث نذكر هنا بعض الطرق الأساسية لإدارة cdb و pdb
رسم بياني للعلاقة بين cdb و pdb
إصدار ORACLE 12C
SQL> select * from v$version; الشعار CON_ID -------------------------------------------------------------------------------- ---------- Oracle Database 12c Enterprise Edition إصدار 12.1.0.1.0 - 64bit الإنتاج 0 إصدار PL/SQL 12.1.0.1.0 - الإنتاج 0 CORE 12.1.0.1.0 الإنتاج 0 TNS للـ Linux: إصدار 12.1.0.1.0 - الإنتاج 0 إصدار NLSRTL 12.1.0.1.0 - الإنتاج 0
إطلاق وإغلاق pdb
SQL> startup بدأ مثيل ORACLE. مجموع منطقة العالمية للنظام 597098496 بايت حجم ثابت 2291072 بايت حجم متغير 272632448 بايت مكتبات ديتابيس 314572800 بايت مكتبات إعادة التشغيل 7602176 بايت مونت ديتابيس. Database opened. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL> alter PLUGGABLE database pdb1 open; Pluggable database altered. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 READ WRITE 4 3872456618 PDB2 MOUNTED SQL> alter PLUGGABLE database pdb1 close; Pluggable database altered. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL> alter PLUGGABLE database all open; Pluggable database altered. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 READ WRITE 4 3872456618 PDB2 READ WRITE SQL> alter PLUGGABLE database all close; Pluggable database altered. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL> alter session set container=pdb1; Session altered. SQL> startup Pluggable Database opened. SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 3 3313918585 PDB1 READ WRITE
The management of pdb can be done in cdb or pdb, if it is done in cdb, the PLUGGABLE keyword is required, if it is done in pdb, it is the same as a normal database directly
login pdb
[oracle@xifenfei ~]$ lsnrctl status LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 12-MAY-2013 08:07:02 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xifenfei)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.1.0 - Production Start Date 11-MAY-2013 18:30:54 Uptime 0 days 13 hr. 36 min. 8 sec Trace Level off Security ON: Local OS Authentication SNMP OFF ملف معاملات المستمع /u01/app/grid/product/12.1/network/admin/listener.ora ملف سجلات المستمع /u01/app/grid/diag/tnslsnr/xifenfei/listener/alert/log.xml ملخص نقاط الاستماع... (وصف=(عنوان=(بروتوكول=ipc)(المفتاح=EXTPROC1521))) (وصف=(عنوان=(بروتوكول=tcp)(مضيف=xifenfei)(منفذ=1521))) (وصف=(عنوان=(بروتوكول=tcps)(مضيف=xifenfei)(منفذ=5500))) (الأمان=(مجلد المحفظة_المخصصة=/u01/oracle/12.1/db_1/admin/cdb/xdb_wallet))(العرض=HTTP)(الجلسة=نقية)) ملخص الخدمات... الخدمة "+ASM" لديها 1 حالة. ال实体 "+ASM"، حالة جاهزية، لديها 1 معالجًا للخدمة... الخدمة "cdb" لديها 1 حالة. ال实体 "cdb"، حالة جاهزية، لديها 1 معالجًا للخدمة... الخدمة "cdbXDB" لديها 1 حالة. ال实体 "cdb"، حالة جاهزية، لديها 1 معالجًا للخدمة... الخدمة "pdb1" لديها 1 حالة. ال实体 "cdb"، حالة جاهزية، لديها 1 معالجًا للخدمة... الخدمة "pdb2" لديها 1 حالة. ال实体 "cdb"، حالة جاهزية، لديها 1 معالجًا للخدمة... تم إكمال الأمر بنجاح [oracle@xifenfei ~]$ tnsping pdb1 تطبيق تي إن أس بينغ للتحقق من الاتصال لنظام التشغيل لينكس: إصدار 12.1.0.1.0 - الإنتاج في 12-مايو-2013 08:07:09 جميع الحقوق محفوظة © (c) 1997، 2013، Oracle. استخدم ملفات المعلمات: استخدم مدير أسماء TNSNAMES لحل الاسم تحاول الاتصال (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xifenfei) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1))) OK (20 ميليسي ثانية) [oracle@xifenfei ~]$ sqlplus sys/xifenfei@pdb1 as sysdba SQL*Plus: إصدار 12.1.0.1.0 الإنتاج في Sun May 12 08:08:02 2013 جميع الحقوق محفوظة © (c) 1982، 2013، Oracle. متصلك إلى: Oracle Database 12c Enterprise Edition إصدار 12.1.0.1.0 - 64bit الإنتاج مع التقسيم، إدارة التخزين التلقائية، OLAP، التحليلات المتقدمة وخيارات اختبار التطبيقات الحقيقية SQL> show con_name; CON_NAME ------------------------------ PDB1 [oracle@xifenfei ~]$ sqlplus / as sysdba SQL*Plus: إصدار 12.1.0.1.0 الإنتاج في Sun May 12 08:09:14 2013 جميع الحقوق محفوظة © (c) 1982، 2013، Oracle. متصلك إلى: Oracle Database 12c Enterprise Edition إصدار 12.1.0.1.0 - 64bit الإنتاج مع التقسيم، إدارة التخزين التلقائية، OLAP، التحليلات المتقدمة وخيارات اختبار التطبيقات الحقيقية SQL> alter session set container=pdb1; Session altered. SQL> show con_name; CON_NAME ------------------------------ PDB1
يمكن الدخول إلى pdb باستخدام alter session container أو يمكن الدخول مباشرة عبر طريقة tns
إنشاء مستخدم
SQL> show con_name; CON_NAME ------------------------------ CDB$ROOT SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs; CON_ID DBID NAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READ ONLY 3 3313918585 PDB1 READ WRITE 4 3872456618 PDB2 MOUNTED SQL> create user xff identified by xifenfei; create user xff identified by xifenfei alter system set open_cursors=100 * ORA-65096: invalid common user or role name SQL> !oerr ora 65096 65096, 00000, "invalid common user or role name" // *Cause: An attempt was made to create a common user or role with a name // that wass not valid for common users or roles. In addition to // the usual rules for user and role names, common user and role // names must start with C## or c## and consist only of ASCII // characters. // *Action: Specify a valid common user or role name. // SQL> create user c##xff identified by xifenfei; User created. SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS WHERE USERNAME='C##XFF'; USERNAME CON_ID USER_ID ---------- ---------- ---------- C##XFF 1 103 C##XFF 3 104 SQL> alter session set container=pdb1; Session altered. SQL> show con_name CON_NAME ------------------------------ PDB1 SQL> create user xff identified by xifenfei; User created. SQL> create user c##abc identified by xifenfei; create user c##abc identified by xifenfei alter system set open_cursors=100 * ORA-65094: invalid local user or role name
创建用户默认的是container=all,在cdb中只能创建全局用户(c##开头),会在cdb和所有的pdb中创建该用户(但是pdb中的全局用户需要另外授权才能够在pdb中访问)。在pdb中只能创建的用户为本地用户
用户授权
SQL> grant connect to c##xff; Grant succeeded. SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='CONNECT' AND GRANTEE='C##XFF'; GRANTEE CON_ID ------------------------------ ---------- C##XFF 1 SQL> grant resource to c##xff container=all; Grant succeeded. SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='RESOURCE' AND GRANTEE='C##XFF'; GRANTEE CON_ID ------------------------------ ---------- C##XFF 1 C##XFF 3
用户授权默认情况下是只会给当前container,在cdb中也可以指定container=all,对所有open的pdb且存在该用户都进行授权
修改参数
SQL> alter system set open_cursors=500 container=all; SQL> alter system set open_cursors=100; SQL> conn sys/xifenfei@pdb1 as sysdba SQL> conn / as sysdba Connected. SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ Database altered. SQL> conn sys/xifenfei@pdb1 as sysdba alter system set open_cursors=100 * ERROR at line 1: ORA-01219: database or pluggable database not open: queries allowed on fixed tables or views only SQL> alter database open; Database altered. SQL> alter system set open_cursors=100; Connected. SQL> show parameter open_cursors; NAME TYPE VALUE System altered. open_cursors integer 100 SQL> conn / as sysdba Connected. SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------
open_cursors integer 500
يمكن رؤية التغييرات في cdb هنا، سيتم استنساخها إلى pdb؛ إذا تم تعديلها في pdb، سيتم تغطية المعاني الموروثة من cdb