管理CDB和PDB

管理CDBPDB

1 连接CDBPDB

1.1 查看后台进程

ps -ef | grep ora_ | grep -v grep

1.2 查看监听程序状态

lsnrctl status

1.3 连接多租户数据库cdb3

配置ORACLE_SID,使用OS验证连接cdb3

echo $ORACLE_SID
sqlplus / as sysdba

(推荐使用)或者配置tnsnames.ora,使用服务名登录dbca建库后,tnsnames.ora中增加服务名cdb3

cd $ORACLE_HOME/network/admin
vi tnsnames.ora

写入:

CDB3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dba)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cdb3.example.com)
    )
  )

sqlplus sys/oracle@cdb3 as sysdba

1.4 查看数据库是否是多租户数据库

select name,cdb from v$database;

1.5 查看当前连接的容器

show con_name
show con_id

CDB$ROOT   根容器

也可以使用sys_context函数查看会话上下文con_namecon_id属性

select sys_context('userenv','con_name'),sys_context('userenv','con_id') from dual;

1.6 查看可插拔数据库pdb状态

col name for a30
select name,con_id,open_mode from v$pdbs;

show pdbs

PDB$SEED   种子PDB,PDB模板

1.7 连接到可插拔数据库pdb1

不使用export ORACLE_SID=pdb1的方式连接pdb

1.7.1 方法一:alter session set container

alter session set container=pdb1;
show con_name
show con_id

注意:已经切换到pdb1,但这种方法连接,sqlplus命令提示符不变

1.7.2 方法二:配置tnsnames.ora增加pdb1

cd $ORACLE_HOME/network/admin
vi tnsnames.ora

写入:

PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dba)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1.example.com)
    )
  )
1.7.2.1 sqlplus通过服务名连接pdb1
sqlplus sys/oracle@pdb1 as sysdba
show con_name
show pdbs

1.7.2.2 cdb3使用connect命令切换到pdb1
sqlplus sys/oracle@cdb3 as sysdba
show pdbs
conn sys/oracle@pdb1 as sysdba
show pdbs 

1.8 pdb切换回cdb

1.8.1 方法一:alter session set container

alter session set container=cdb$root;

同样,sqlplus命令提示符仍显示之前状态没有改变

1.8.2 方法二:直接conn / as sysdba

conn / as sysdba

pdb中,执行conn / as sysdba会切换连接到根容器cdb1,而不是pdb中的sys用户

或者通过服务名的方式切换

conn sys/oracle@cdb1 as sysdba

 

2 CDB实例的启动与关闭

2.1 关闭cdb实例

shutdown immediate;

ps -ef | grep ora_ | grep -v grep

2.2 启动cdb实例

startup nomount;
select name,con_id,open_mode from v$pdbs;

2.3 mount装载CDB

alter database mount;
select instance_name,status from v$instance;

select name,con_id,open_mode from v$pdbs;
show pdbs

2.4 open打开CDB

alter database open;
show pdbs

 

3 打开与关闭PDB

3.1 查看pdb状态

show pdbs

cdb处于open状态时,pdb默认处于mounted状态(种子pdb PDB$SEED始终read only状态)

3.2 pdb中操作:打开pdb

conn sys/oracle@pdb1 as sysdba
show pdbs
alter database open;

3.3 pdb中操作:关闭pdb

show pdbs;
shutdown immediate;

3.4 cdb中操作:打开pdb

conn / as sysdba
show pdbs

alter pluggable database pdb1 open;
show pdbs

3.5 cdb中操作:关闭pdb

alter pluggable database pdb1 close immediate;
show pdbs

3.6 cdb中操作:打开所有非种子pdb

alter pluggable database all open;
show pdbs;

PDB$SEED作为创建其他pdb的模板使用,不建议open read write打开pdb$seed

3.7 自动打开pdb

3.7.1 配置CDB openPDB打开状态

当前pdb1 open read write状态

show pdbs
alter pluggable database pdb1 save state;

col con_name for a10
col instance_name for a20
col state for a10
select con_name,instance_name,state from cdb_pdb_saved_states;

shutdown immediate;
startup

3.7.2 取消状态恢复默认

alter pluggable database pdb1 discard state;
select con_name,instance_name,state from cdb_pdb_saved_states;

shutdown immediate;
startup

 

4 自动诊断目录库

col name for a25
col value for a70
select name,value from v$diag_info;

 

5 数据字典视图

5.1 CDB_xxx

5.2 DBA_xxx

5.3 CDB 中查看数据文件、临时文件

pdb处于open状态

alter pluggable database all open;
show pdbs

5.3.1 数据文件

col FILE_NAME for a50
select con_id,file_id,file_name,tablespace_name from cdb_data_files;
select file_id,file_name,tablespace_name from dba_data_files;

5.3.2 临时文件

select file_id,file_name,tablespace_name from cdb_temp_files;
select file_id,file_name,tablespace_name from dba_temp_files;

5.4 PDB中查看数据文件、临时文件

sqlplus sys/oracle@pdb1 as sysdba

5.4.1 数据文件

col FILE_NAME for a50
select con_id,file_id,file_name,tablespace_name from cdb_data_files;
select file_id,file_name,tablespace_name from dba_data_files;

5.4.2 临时文件

select file_id,file_name,tablespace_name from cdb_temp_files;
select file_id,file_name,tablespace_name from dba_temp_files;

5.5 查看控制文件、日志文件

select member from v$logfile;
select name from v$controlfile;

 

6 公共与本地(用户、权限、角色)

6.1 公用用户和本地用户

select username,common,con_id from cdb_users where username in ('SYS','HR');

6.1.1 cdb中创建公用用户

create user cdb_user identified by oracle;
show parameter common_user_prefix

create user c##cdb_user identified by oracle;
select username,common,con_id from cdb_users where username in ('SYS','HR','C##CDB_USER');

drop user c##cdb_user cascade;

6.1.2 pdb中创建本地用户

create user pdb1_user identified by oracle;
select username,common,con_id from cdb_users where username in ('SYS','HR','C##CDB_USER','PDB1_USER');

cdb中查看

select username,common,con_id from cdb_users where username in ('SYS','HR','C##CDB_USER','PDB1_USER');

6.2 公用和本地权限和角色

6.2.1 cdb中给公用用户授权

sqlplus c##cdb_user/oracle@cdb3
sqlplus c##cdb_user/oracle@pdb1

默认没有权限登录

6.2.1.1 container=current
grant connect to c##cdb_user container=current;
sqlplus c##cdb_user/oracle@cdb3
sqlplus c##cdb_user/oracle@pdb1

cdb有权限登录,pdb没有权限

6.2.1.2 container=all
grant connect to c##cdb_user container=all;
conn c##cdb_user/oracle@cdb3
conn c##cdb_user/oracle@pdb1

6.2.2 pdb中给本地用户授权

grant connect to pdb1_user container=all;
grant connect to pdb1_user container=current;

6.3 pdb中解锁hr用户方案

alter user hr identified by hr account unlock;
conn hr/hr@pdb1;
select table_name from user_tables;

6.4 pdb中创建scott用户修改脚本

cd $ORACLE_HOME/rdbms/admin
cp utlsampl.sql utlsampl.sql.pdb1
vi utlsampl.sql.pdb1

sqlplus sys/oracle@pdb1 as sysdba
@?/rdbms/admin/utlsampl.sql.pdb1

 

7 表空间管理

7.1 CDB中创建永久表空间

7.2 分配默认表空间

7.3 创建本地临时表空间

7.4 分配默认临时表空间

 

8 SQL developer连接CDB

win端已经安装了oracle19c client()

8.1 启动SQL developer

8.2 配置wintnsnames.ora

路径:\PLSQL Developer 14\instantclient_12_2\NETWORK\ADMIN\tnsnames.ora

添加:

CDB3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.9.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cdb3.example.com)
    )
  )

8.3 创建连接

posted @ 2021-07-19 17:48  chchcharlie、  阅读(1162)  评论(0编辑  收藏  举报