签到成功

知道了

CNDBA社区CNDBA社区

Oracle 19c 创建 PDB、表空间、用户 操作示例

2025-07-02 15:01 9 0 原创 Oracle 19c
作者: dave

之前的博客我们了解了静默安装19c,如下:

http://www.cndba.cn/cndba/dave/article/131674

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。http://www.cndba.cn/cndba/dave/article/131674

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 修改默认用户表空间

查看表空间情况:http://www.cndba.cn/cndba/dave/article/131674

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 表空间的,这个肯定不合理。 所以我们需要创建一个独立的业务表空间,并设置未默认表空间。 http://www.cndba.cn/cndba/dave/article/131674http://www.cndba.cn/cndba/dave/article/131674

连接到PDB:

SQL>ALTER SESSION SET CONTAINER=orcl;

http://www.cndba.cn/cndba/dave/article/131674

创建永久表空间:http://www.cndba.cn/cndba/dave/article/131674

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:http://www.cndba.cn/cndba/dave/article/131674

SQL> grant dba,resource,connect to admin;
Grant succeeded.

然后创建一个业务用户dave并赋权:http://www.cndba.cn/cndba/dave/article/131674

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.

验证连接:http://www.cndba.cn/cndba/dave/article/131674

[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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2279
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8160199次
  • 积分:4413
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ