oracle数据库概念
ORACLE数据库系统在版本12c之后引入了Container Database(CDB)和Pluggable Database(PDB)的概念。这种体系结构设计旨在提供一种灵活、可伸缩且易于管理的解决方案。
-
CDB(Container Database):容器数据库是包含一个或多个可插拔数据库(PDB)的数据库。CDB为PDB提供了数据库管理功能,如内存和资源管理。每个PDB都是独立的,拥有自己的数据库实例,可以被认为是一个传统意义上的Oracle数据库。
-
PDB(Pluggable Database):可插拔数据库是CDB中的一个独立数据库实例,它可以在不关闭CDB的情况下创建、修改或删除。PDB允许用户在同一CDB中同时拥有多个独立的数据库实例,这些实例可以运行不同版本的Oracle数据库,或者用于隔离不同的应用程序。
问题原因
两种数据库创建用户的方式不一样 CDB需要在前面加上C## 但PDB不用 ,因此,在执行数据泵迁移等问题时可能会出现问题
解决方法
解决办法1
查询当前数据库处于那种模式
show con_name
结果是
CDB$ROOT
在CDB数据库下面输入就可以不用C##了 如果没有成功可以重新启动下数据库试试
alter session set "_oracle_script"=true;
解决方法2
这种方式好像只在当前有效,退出了重新开启好像就会改回来,不建议使用
SQL> select sys_context ('USERENV', 'CON_NAME') from dual;
SYS_CONTEXT('USERENV','CON_NAME')
--------------------------------------------------------------------------------
CDB$ROOT
SQL> set pagesize 200
SQL> set linesize 200
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;CON_ID DBID NAME
---------- ---------- ----------------------------------------------------------------------------------------------------
2 2760955567 PDB$SEED READ ONLY
3 2714456025 PDB1
SQL> alter session set container=PDB1;
Session altered.
SQL> select sys_context ('USERENV', 'CON_NAME') from dual;
SYS_CONTEXT('USERENV','CON_NAME')
---------------------------------------------------------------------------------
PDB1
SQL> create user pstest identified by pstest;
User created.
SQL>
解决方法3
更改这个文件里面的内容 db_后面是你的实例名,会根据自己的情况查找 静默安装一般会在这个位置
vi /etc/init.d/oracledb_ORCLCDB-19c
将里面的CREATE_AS_CDB改为False
这种方法一般在静默安装时进行更改,如果你安装好了,也可以尝试一下,因为我的是在安装时做的 不知道这样子是否能成功