之前的博客我们了解了静默安装19c,如下:
Linux 平台 静默安装 Oracle 19c 软件、监听 和 CDB实例
https://www.cndba.cn/dave/article/131671
本篇我们来继续补充完整PDB和用户创建的命令。
1 创建PDB
创建PDB 有多种方式:模板、克隆、迁移、插入,完成的说明可以参考我的书籍:
《Oracle 18c 必须掌握的新特性》
https://www.cndba.cn/dave/article/3453
我们这里只看最基础的,通过seed pdb来创建。
SQL> create pluggable database orcl admin user admin identified by admin file_name_convert = ('pdbseed','orcl');
Pluggable database created.
这里创建了一个orcl的pdb和一个对应的管理用户admin。
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
4 ORCL MOUNTED
SQL> alter pluggable database orcl open;
Pluggable database altered.
SQL> alter pluggable database orcl save state;
Pluggable database altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
4 ORCL READ WRITE NO
2 修改默认用户表空间
查看表空间情况:
SQL> select tablespace_name,file_id,file_name from dba_data_files;
TABLESPACE FILE_ID FILE_NAME
---------- ------- --------------------------------------------------------------------------------
SYSTEM 13 /u03/app/oracle/oradata/CNDBA/orcl/system01.dbf
SYSAUX 14 /u03/app/oracle/oradata/CNDBA/orcl/sysaux01.dbf
UNDOTBS1 15 /u03/app/oracle/oradata/CNDBA/orcl/undotbs01.dbf
SQL> select tablespace_name,file_id,file_name from dba_temp_files;
TABLESPACE FILE_ID FILE_NAME
---------- ------- --------------------------------------------------------------------------------
TEMP 4 /u03/app/oracle/oradata/CNDBA/orcl/temp012025-07-02_00-35-58-893-AM.dbf
SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_VALUE
--------------------------------------------------------------------------------
SYSTEM
默认情况下,PDB 的默认表空间是SYSTEM, 也就是说在创建用户时,未指明表空间的情况下,数据都是存放在SYSTEM 表空间的,这个肯定不合理。 所以我们需要创建一个独立的业务表空间,并设置未默认表空间。
连接到PDB:
SQL>ALTER SESSION SET CONTAINER=orcl;
创建永久表空间:
SQL> create tablespace orcl datafile '/u03/app/oracle/oradata/CNDBA/orcl/orcl01.dbf' size 5m autoextend on;
Tablespace created.
SQL> select tablespace_name,file_id,file_name from dba_data_files;
TABLESPACE FILE_ID FILE_NAME
---------- ------- --------------------------------------------------------------------------------
SYSTEM 13 /u03/app/oracle/oradata/CNDBA/orcl/system01.dbf
SYSAUX 14 /u03/app/oracle/oradata/CNDBA/orcl/sysaux01.dbf
UNDOTBS1 15 /u03/app/oracle/oradata/CNDBA/orcl/undotbs01.dbf
ORCL 16 /u03/app/oracle/oradata/CNDBA/orcl/orcl01.dbf
查看PDB的表空间:
SQL> SELECT p.PDB_ID, p.PDB_NAME, d.TABLESPACE_NAME FROM DBA_PDBS p, CDB_TABLESPACES d WHERE p.PDB_ID = d.CON_ID ORDER BY p.PDB_ID;
PDB_ID PDB_NAME TABLESPACE
------ -------- ----------
4 ORCL SYSTEM
4 ORCL SYSAUX
4 ORCL UNDOTBS1
4 ORCL TEMP
4 ORCL ORCL
指定默认表空间:
SQL> ALTER DATABASE DEFAULT TABLESPACE orcl;
Database altered.
查看当前PDB的默认永久表空间和临时表空间
SQL>SET LINESIZE 200
SQL>COL PROPERTY_NAME FORMAT A30
SQL>COL PROPERTY_VALUE FORMAT A20
SQL>SELECT PROPERTY_NAME,PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME IN ('DEFAULT_PERMANENT_TABLESPACE','DEFAULT_TEMP_TABLESPACE');
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------
DEFAULT_PERMANENT_TABLESPACE ORCL
DEFAULT_TEMP_TABLESPACE TEMP
3 创建业务用户
我们在创建PDB的时候指定了一个管理用户,在修改默认表空间后,该用户的表空间也变成了ORCL:
SQL> select username,default_tablespace from dba_users where username='ADMIN';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------------------------------------------------------------------
ADMIN ORCL
SQL> col grantee for a15
SQL> col granted_role for a20
SQL> col privilege for a40
SQL> SELECT grantee, granted_role, privilege
2 FROM dba_role_privs
3 JOIN role_sys_privs ON granted_role = role
4 WHERE grantee IN ('ADMIN');
GRANTEE GRANTED_ROLE PRIVILEGE
--------------- -------------------- ----------------------------------------
ADMIN PDB_DBA CREATE PLUGGABLE DATABASE
ADMIN PDB_DBA CREATE SESSION
可以看到这个用户的权限也不高,我们给这个用户赋权DBA:
SQL> grant dba,resource,connect to admin;
Grant succeeded.
然后创建一个业务用户dave并赋权:
SQL> create user dave identified by dave default tablespace orcl;
User created.
SQL> grant connect,resource to dave;
Grant succeeded.
SQL> ALTER USER dave QUOTA UNLIMITED ON ORCL;
User altered.
设置用户在表空间上的配额,否则会报如下错误:
ORA-01950: no privileges on tablespace 'ORCL'
SQL> SELECT * FROM DBA_TS_QUOTAS WHERE USERNAME='DAVE';
TABLESPACE USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DROPPED
---------- ------------------------------ ---------- ---------- ---------- ---------- ---------
ORCL DAVE 0 -1 0 -1 NO
查看用户的权限:
SQL> SELECT grantee, granted_role, privilege
2 FROM dba_role_privs
3 JOIN role_sys_privs ON granted_role = role
4 WHERE grantee IN ('DAVE');
GRANTEE GRANTED_ROLE PRIVILEGE
--------------- -------------------- ----------------------------------------
DAVE RESOURCE CREATE SEQUENCE
DAVE RESOURCE CREATE PROCEDURE
DAVE CONNECT SET CONTAINER
DAVE CONNECT CREATE SESSION
DAVE RESOURCE CREATE CLUSTER
DAVE RESOURCE CREATE INDEXTYPE
DAVE RESOURCE CREATE OPERATOR
DAVE RESOURCE CREATE TYPE
DAVE RESOURCE CREATE TRIGGER
DAVE RESOURCE CREATE TABLE
10 rows selected.
验证连接:
[dave@cndba.cn admin]$ cat tnsnames.ora
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora11g)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
[dave@cndba.cn admin]$ sqlplus dave/dave@orcl
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 2 14:34:40 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Wed Jul 02 2025 14:34:20 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show con_name
CON_NAME
------------------------------
ORCL
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Linux 部署 rlwrap