蓝帆天诚
0、复制pdb
--创建pdb,改dbname即可
CREATE PLUGGABLE DATABASE dbname1 ADMIN USER pdbadmin IDENTIFIED BY padmin123 ROLES=(CONNECT) file_name_convert=NONE STORAGE ( MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED)
或
create pluggable database p2 from p1;
删除pdb
SQL> ALTER PLUGGABLE DATABASE p2 CLOSE; Pluggable database altered. SQL> DROP PLUGGABLE DATABASE p2 INCLUDING DATAFILES; Pluggable database dropped.
数据库启动的时候所有的PDB的状态为MOUNTED,以下设置自动启动(CDB级别操作):
create or replace trigger sys.pdb_startup
after startup on database
begin
execute immediate 'alter pluggable database all open';
end pdb_startup;
/
CDB查询:
set line 200
col name for a20
SELECT CON_ID, DBID, CON_UID, GUID, NAME FROM v$pdbs;
CON_ID DBID CON_UID GUID NAME
---------- ---------- ---------- -------------------------------- --------------------
2 2923413308 2923413308 E294550052B061BCE0533B03000A3577 PDB$SEED
3 4080829867 4080829867 E29482BED2E041CFE0533B03000A68BB WMSPDB
===================================================================================
col name for a15
SET LINES 150SELECT CON_ID, DBID, CON_UID, GUID, NAME,open_mode FROM v$pdbs;
1,查询pdb 监听 server名
因为CDB和PDB的servicename可能是不一样的,需要先查询pdb的service_name
SQL> select name,pdb from v$services;
NAME PDB
-------------------- --------------------
orcl ORCL
vi tnsnames.ora 编辑tnsnames文件,添加下面内容
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) 把查询到pdb对应的service_name写到这里
)
)
必须要加上tnsnames的连接串才可以连接用户:
SQL> conn scott/oracle@ORCL
Connected.
SQL> show user
USER is "SCOTT"
连接成功!
lsnrctl status ---- 里面也有对应的service_names
service必须存在,tns中的servicename就是写这个,12c通过ip:port和service name来连接pdb
可在cdb或pdb中执行:
col pdb for a20
col name for a20
col network_name for a20
select PDB,CON_ID,NAME,NETWORK_NAME from v$services;
2,
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select name,cdb from v$database;--->>>检查一个db是不是cdb
NAME CDB
--------- ---
ORCL YES
SQL>
--->>>检查pdb的状态
SQL> SELECT con_id,NAME,OPEN_MODE,restricted from v$PDBS;
CON_ID NAME OPEN_MODE RES
---------- ------------------------------ ---------- ---
2 PDB$SEED READ ONLY NO
3 PN1 MOUNTED
4 PN2 MOUNTED
--->>>检查一个pdb内可用的services
SQL> SELECT con_id,NAME,OPEN_MODE,restricted from v$PDBS;
CON_ID NAME OPEN_MODE RES
---------- ------------------------------ ---------- ---
2 PDB$SEED READ ONLY NO
3 PN1 MOUNTED
4 PN2 MOUNTED
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> set lines 100
SQL> col name format a20
SQL> col network_name format a20
SQL> col pdb format a20
SQL>select service_id,name,network_name,global_service,pdb,enabled from dba_services;
SERVICE_ID NAME NETWORK_NAME GLO PDB ENA
---------- -------------------- -------------------- --- -------------------- ---
6 pn1 pn1 NO PN1 NO
--->>>从cdb中查看service的情况:
SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> select service_id, name,pdb from v$services;
SERVICE_ID NAME PDB
---------- -------------------- --------------------
0 pn2 PN2
6 pn1 PN1
3 orclXDB CDB$ROOT
4 orcl CDB$ROOT
1 SYS$BACKGROUND CDB$ROOT
2 SYS$USERS CDB$ROOT
6 rows selected.