Oracle-创建用户不带C##(Oracle 19c)

由于oracle从12c开始引入了容器(PDB和CDB)、租户的概念。直接连接sysdba用户创建新用户时,会默认在CDB中创建公有用户,用户名需要以“C##”或“c##”开头。

如果用户名开头不想使用“C##”或“c##”,则需要做如下操作。

 

(1)使用sysdba管理员用户登录

sqlplus / as sysdba

 

(2)查看数据库是否为 CDB

select CDB from v$database;

说明:

如果得到的结果为YES,那么就是CDB的数据库,否则,则不是。

在CDB容器中创建用户时,前面必须添加C## ,而PDB数据库不需要加前缀。

 

(3)查看数据库存在容器

show  pdbs ;

 

(3)启动PDB数据库

alter pluggable database ORCLPDB1 open;

如果出现上面的错误提示,说明PDB已经打开。

 

(4)切换到ORCLPDB容器

alter session set container=ORCLPDB1;

 

(5)查看当前使用容器

select sys_context ('USERENV', 'CON_NAME') from dual;

 

(6)创建用户

CREATE USER  dsjzx IDENTIFIED BY "Dsjzx123" ;

用户名:dsjzx       密码:  Dsjzx123

注意:密码需要使用双引号包裹起来,避免一些异常错误。

使用单引号会报错: ORA-00988: missing or invalid password(s)

不使用双引号报错:ORA-00922: missing or invalid option

 

(7)给用户授权

GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO dsjzx CONTAINER=current ;

 

(8)设置表空间

ALTER USER dsjzx DEFAULT TABLESPACE   dsjzx_data ;

ALTER USER dsjzx TEMPORARY TABLESPACE   dsjzx_temp ;

 

如果没有表空间和临时表空间,可以使用下面的语句进行创建:

--创建临时表空间
create temporary tablespace dsjzx_temp
tempfile '/data/oracledata/dsjzx_pdb_temp.dbf'
size 100m  
autoextend on  
next 100m
maxsize UNLIMITED
extent management local;

--创建表空间
create tablespace dsjzx_data  
logging  
datafile '/data/oracledata/dsjzx_pdb_data.dbf' 
size 1G  
autoextend on  
next 100m  
maxsize UNLIMITED
extent management local
Segment space management auto ; 


(9)提交

COMMIT;

 

(10)编辑tnsnames.ora 文件

cd   /opt/oracle/product/19c/dbhome_1/network/admin/

vi  tnsnames.ora 

添加如下内容: 

ORCLPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hadoop04)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)

注意:HOST 后面主机名,需要根据自己的主机进行修改

           SERVICE_NAME为PDB的名称,根据自己PDB名称修改。

 

(11)使用普通用户进行登录

sqlplus   /nolog 

connect dsjzx@orclpdb1/Dsjzx123

说明: conn <username>@<pdbname>/<password>;

 

(12)查看当前用户的所有表

--查看当前用户的所有表
SELECT table_name FROM user_tables;

 

--查看所有表
SELECT table_name FROM all_tables;

--例如: 查看用户dsjzx的所有表

SELECT table_name FROM all_tables WHERE owner = 'DSJZX';

注意:用户名区分大小写,默认为大写。

 

--查看所有用户的表,普通用户可能没有权限
SELECT table_name FROM dba_tables;

--例如: 查看用户dsjzx的所有表

SELECT table_name FROM dba_tables WHERE owner = 'DSJZX';

 

posted @ 2024-02-06 15:14  业余砖家  阅读(640)  评论(0编辑  收藏  举报