技术交流

pdb创建及常用命令
日期:2023年03月16日

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 150
SELECT 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.


上一篇:培训用PDF 下一篇:ssh安全设置