English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مقدمة في الأساسيات للحفاظ على PDB في Oracle 12C

先说基本用法:
先按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

تعليمية الأساس
سيكون لك