1.1 连接数据库

说明:本示例数据库为docker容器部署,实际物理机部署的数据库直接使用sqlplus / as sysdba 进入数据库即可

[admin@localhost ~]$ docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED       STATUS       PORTS                                                                                  NAMES
857c9fee68c2   settle/ora:v1   "/bin/bash"   13 days ago   Up 13 days   0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:5500->5500/tcp, :::5500->5500/tcp   容器名
[admin@localhost ~]$ docker exec -it --user oracle 容器名/容器id /bin/bash
[oracle@ora184 /]$ sqlplus / as sysdba

1.2 查询该容器是CDB 还是非CDB

SQL> select name,cdb,open_mode,con_id from v$database;

NAME      CDB OPEN_MODE                CON_ID
--------- --- -------------------- ----------
ORCLCDB   YES READ WRITE                    0

查看所创建的PDB

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO

2.1创建一个新PDB

SQL> select  name from v$datafile;

NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLCDB/system01.dbf
/opt/oracle/oradata/ORCLCDB/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/users01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf


--创建pdb
SQL> create pluggable database 数据库实例 admin user 用户名 identified by 密码 file_name_convert=('/opt/oracle/oradata/ORCLCDB/pdbseed/','/opt/oracle/oradata/ORCLCDB/数据库实例/');

Pluggable database created.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         4 数据库实例                         MOUNTED

注:select name from v$datafile; 可查询file_name_convert的路径

2.2启动一个创建好的pdb

--启动一个创建好的pdb
SQL> alter pluggable database 数据库实例 open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         4 数据库实例                         READ WRITE NO
SQL>

2.3创建表空间

切换到对应的pdb下
ALTER SESSION SET CONTAINER=数据库实例;
创建表空间
CREATE TABLESPACE 数据库实例_INDEX
LOGGING
DATAFILE '/opt/oracle/oradata/ORCLCDB/数据库实例/数据库实例_INDEX01.DBF'
SIZE 100M
AUTOEXTEND ON
NEXT 1M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;

CREATE TABLESPACE 数据库实例_DATA
LOGGING
DATAFILE '/opt/oracle/oradata/ORCLCDB/数据库实例/数据库实例_DATA01.DBF'
SIZE 100M
AUTOEXTEND ON
NEXT 1M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;

若是要删除表空间,用如下语句:
drop tablespace 数据库实例_INDEX including contents and datafiles cascade constraint;
drop tablespace 数据库实例_DATA including contents and datafiles cascade constraint;

● 重启数据库

alter pluggable database 数据库实例 close;
alter pluggable database 数据库实例 open;

3. 配置监听文件

监听文件目录在$ORACLE_HOME/network/admin
说明:容器里无法使用vi命令,因此在容器外修改对应配置文件,挂载目录为:/home/admin/oradata/dbconfig/ORCLCDB

3.1 tnsnames.ora 文件内容

 数据库实例=
     (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 数据库实例)
    )
     )

3.2 listener.ora 文件内容

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orclpdb1)
      (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
      (SID_NAME = orclpdb1)
    )
   (SID_DESC =
      (GLOBAL_DBNAME = 数据库实例)
      (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
      (SID_NAME = 数据库实例)
    )
   )

3.3 测试配置是否成功(需要切换到Oracle用户)

[oracle@ora184 /]$ tnsping 数据库实例

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 31-AUG-2022 14:25:09

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/opt/oracle/product/19c/dbhome_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = 数据库实例)))
OK (30 msec)

4. 配置启动项

oracle12C中在启动数据库的时候,PDB并不会随着CDB而启动。可以通过创建一个触发器让PDB能够随CDB启动。

 alter session set container=CDB$ROOT;
   CREATE OR REPLACE TRIGGER open_pdbs
     AFTER STARTUP ON DATABASE
   BEGIN
     EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
   END open_pdbs;
   /
   --关闭数据库
   SQL> shutdown immediate;
   Database closed.
   Database dismounted.
   ORACLE instance shut down.
   --启动数据库
   SQL> startup
   ORACLE instance started.
   
   Total System Global Area 1610611336 bytes
   Fixed Size                  9136776 bytes
   Variable Size            1040187392 bytes
   Database Buffers          553648128 bytes
   Redo Buffers                7639040 bytes
   Database mounted.
   Database opened.
   SQL>
   

5.创建用户并授权

切换容器:
alter session set container=swapry;

查看当前使用容器:
select sys_context ('USERENV', 'CON_NAME') from dual;

创建用户:

create user 用户 identified by oracle
default tablespace 之前创建的表空间名
temporary tablespace TEMP
profile DEFAULT;

可以考虑给如下权限:
grant connect,resource to  用户;
grant unlimited tablespace to  用户;
grant restricted session to  用户;
grant imp_full_database to 用户;
grant exp_full_database to 用户;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐