一、环境准备
- container模式在23.8.0.25.04这个版本有报错提示。最后校验,预计RPM上安装解决。
- 操作系统与目录规范--挂载目录报错,原因不知是不是现在的container已到了23.8.0.25.04有改变
--挂载本地磁盘到镜像的路径,在podman配置文件中
--将报错 -v /u01/app/oracle/oradata/tru-cc-free:/opt/oracle/oradata
# 创建符合 OFA 标准的目录
sudo mkdir -p /u01/app/oracle/oradata/{pri-db-free,tru-cc-free}
sudo chmod 775 /u01/app/oracle/oradata/*
官方手册:
主库必须为归档模式(ARCHIVELOG)
True Cache 节点需安装相同版本的 Oracle 软件
- 拉取官方镜像
podman pull container-registry.oracle.com/database/free:latest
二、网络配置(Oracle 网络规范)
# 创建 macvlan 网络
podman network create -d macvlan \
--subnet=192.168.168.0/24 \
--gateway=192.168.168.1 \
-o parent=ens-192 tc_net
--parent 参数需替换为宿主机实际物理网卡
检查tc-net
[root@OL95 oradata]#
podman inspect tc_net | grep -iw 'subnet'
"subnet": "192.168.168.0/24",
创建名为 oracle_pwd 的 Secret,内容来自文件或标准输入
echo "QAZwsx123456" > password.txt
podman secret create oracle_pwd password.txt
三、主库部署(pri-db-free)--2025-06-01已验证,命令下是运行记录
podman run -td --name pri-db-free
--hostname pri-db-free
--net=tc_net
--ip 192.168.168.10
-p :1521
--add-host="tru-cc-free:192.168.168.20"
--secret=oracle_pwd
-e ENABLE_ARCHIVELOG=true
-e ENABLE_FORCE_LOGGING=true
container-registry.oracle.com/database/free:latest
[root@OL95 oradata]# podman run -d --name pri-db-free \
--hostname pri-db-free \
--network tc_net --ip 192.168.168.10 \
-p 1521:1521 \
--add-host="tru-cc-free:192.168.168.20" \
-e ORACLE_PWD=QAZwsx123456 \
-e ENABLE_ARCHIVELOG=true \
-e ENABLE_FORCE_LOGGING=true \
container-registry.oracle.com/database/free:latest
297bf1942d33a259a1514ff6ff6137f9c066a30d3adc26ff8ef9e6d45fafd1f3
[root@OL95 oradata]# podman logs -f pri-db-free
Starting Oracle Net Listener.
Oracle Net Listener started.
Starting Oracle Database instance FREE.
Oracle Database instance FREE started.
The Oracle base remains unchanged with value /opt/oracle
SQL*Plus: Release 23.0.0.0.0 - Production on Sun Jun 1 12:39:48 2025
Version 23.8.0.25.04
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
SQL>
User altered.
SQL>
User altered.
SQL>
Session altered.
SQL>
User altered.
SQL> Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: Pluggable database FREEPDB1 opened read write
Completed: ALTER DATABASE OPEN
2025-06-01T12:39:48.847180+00:00
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================
2025-06-01T12:39:51.091870+00:00
FREEPDB1(3):TABLE AUDSYS.AUD$UNIFIED: ADDED INTERVAL PARTITION SYS_P288 (3989) VALUES LESS THAN (TIMESTAMP' 2025-06-02 00:00:00')
2025-06-01T12:40:43.660432+00:00
TABLE SYS.WRP$_REPORTS: ADDED AUTOLIST FRAGMENT SYS_P336 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
TABLE SYS.WRP$_REPORTS_DETAILS: ADDED AUTOLIST FRAGMENT SYS_P337 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED AUTOLIST FRAGMENT SYS_P340 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
验证归档状态:
[root@OL95 oradata]# podman exec -it pri-db-free sqlplus / as sysdba;
SELECT log_mode FROM v$database;
LOG_MODE
------------
ARCHIVELOG
容器内开启归档
podman exec -it pri-db-free \
sqlplus / as sysdba
> ALTER DATABASE ARCHIVELOG;
> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/oradata/arch';
拷贝主库密码文件到true cache主机,
建议在启动 tru-cc-free主机的时候,logs会报错,再拷贝。
podman cp pri-db-free:/opt/oracle/product/23ai/dbhomeFree/dbs/orapwFREE tru-cc-free:/var/tmp/
四、True Cache 部署(tru-cc-free)
- 启动true cache 容器
podman run -td --name tru-cc-free \
--hostname tru-cc-free \
--net=tc_net \
--ip 192.168.168.20 \
-p :1521 \
--add-host="pri-db-free:192.168.168.10" \
--secret=oracle_pwd \
-e TRUE_CACHE=true \
-e PRIMARY_DB_PWD_FILE=/var/tmp/orapwFREE \
-e PRIMARY_DB_CONN_STR=192.168.168.10:1521/FREE \
container-registry.oracle.com/database/free:latest
运行记录
[root@OL95 oradata]# podman logs -f tru-cc-free
Starting Oracle Net Listener.
Oracle Net Listener started.
Starting Oracle Database instance FREE.
Oracle Database instance FREE started.
The Oracle base remains unchanged with value /opt/oracle
SQL*Plus: Release 23.0.0.0.0 - Production on Sun Jun 1 13:00:50 2025
Version 23.8.0.25.04
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
SQL>
User altered.
SQL>
User altered.
SQL>
Session altered.
SQL>
User altered.
SQL> Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: Pluggable database FREEPDB1 opened read write
Completed: ALTER DATABASE OPEN
2025-06-01T13:00:50.880130+00:00
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================
2025-06-01T13:00:51.659941+00:00
FREEPDB1(3):TABLE AUDSYS.AUD$UNIFIED: ADDED INTERVAL PARTITION SYS_P288 (3989) VALUES LESS THAN (TIMESTAMP' 2025-06-02 00:00:00')
2025-06-01T13:00:59.355968+00:00
TABLE SYS.WRP$_REPORTS: ADDED AUTOLIST FRAGMENT SYS_P336 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
TABLE SYS.WRP$_REPORTS_DETAILS: ADDED AUTOLIST FRAGMENT SYS_P337 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED AUTOLIST FRAGMENT SYS_P340 (2) VALUES (( 1471336774, TO_DATE(' 2025-05-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian') ))
五、生成true cache的service
Creating True Cache with DBCA
手册介绍:
Once the True Cache container turns healthy, create database application services (sales_tc and sales_pdb_tc) for the True Cache by running the following commands from the pri-db-free container:
podman exec -it pri-db-free bash
$ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE
-trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_tc -serviceName FREE
-sysPassword $(cat /run/secrets/oracle_pwd) -silent
$ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE
-trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_pdb_tc -serviceName FREEPDB1
-pdbName FREEPDB1 -sysPassword $(cat /run/secrets/oracle_pwd) -silent
bash-4.4$ $ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE \
> -trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_tc -serviceName FREE \
> -sysPassword $(cat /run/secrets/oracle_pwd) -silent
Session ID of the current execution is: 1
-----------------
Running Initialization job
Completed Initialization job
33% complete
-----------------
Running Validate_true_cache_instance_connection job
Completed Validate_true_cache_instance_connection job
37% complete
-----------------
Running Validate_dataguard job
Skipping. Job is detected as not applicable.
41% complete
-----------------
Running Validate_db_version job
Completed Validate_db_version job
44% complete
-----------------
Running Validate_true_cache_instance job
Completed Validate_true_cache_instance job
48% complete
-----------------
Running Validate_archive_log_mode job
Completed Validate_archive_log_mode job
52% complete
-----------------
Running Validate_pdb job
Skipping. Job is detected as not applicable.
56% complete
-----------------
Running Validate_primary_db_service job
Completed Validate_primary_db_service job
59% complete
-----------------
Running Validate_true_cache_db_service job
Completed Validate_true_cache_db_service job
63% complete
-----------------
Running Validate_true_cache_instance_open_mode job
Execution of Validate_true_cache_instance_open_mode failed
67% complete
[FATAL] [DBT-19953] True Cache is not in redo apply mode.
CAUSE: True Cache should be in READ ONLY WITH APPLY mode
*** Executing jobs which need to be run always... ***
******** PLUGIN EXECUTION FAILED ********
DBCA resume command:dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE -trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_tc -serviceName FREE -sysPassword ******************* -silent -resume -sessionID 1
Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE0.log" for further details.
bash-4.4$
bash-4.4$ $ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE \
> -trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_pdb_tc -serviceName FREEPDB1 \
> -pdbName FREEPDB1 -sysPassword $(cat /run/secrets/oracle_pwd) -silent
Session ID of the current execution is: 2
-----------------
Running Initialization job
Completed Initialization job
33% complete
-----------------
Running Validate_true_cache_instance_connection job
Completed Validate_true_cache_instance_connection job
37% complete
-----------------
Running Validate_dataguard job
Skipping. Job is detected as not applicable.
41% complete
-----------------
Running Validate_db_version job
Completed Validate_db_version job
44% complete
-----------------
Running Validate_true_cache_instance job
Completed Validate_true_cache_instance job
48% complete
-----------------
Running Validate_archive_log_mode job
Completed Validate_archive_log_mode job
52% complete
-----------------
Running Validate_pdb job
Completed Validate_pdb job
56% complete
-----------------
Running Validate_primary_db_service job
Completed Validate_primary_db_service job
59% complete
-----------------
Running Validate_true_cache_db_service job
Completed Validate_true_cache_db_service job
63% complete
-----------------
Running Validate_true_cache_instance_open_mode job
Execution of Validate_true_cache_instance_open_mode failed
67% complete
[FATAL] [DBT-19953] True Cache is not in redo apply mode.
CAUSE: True Cache should be in READ ONLY WITH APPLY mode
*** Executing jobs which need to be run always... ***
******** PLUGIN EXECUTION FAILED ********
DBCA resume command:dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB FREE -trueCacheConnectString 192.168.168.20:1521/FREE -trueCacheServiceName sales_pdb_tc -serviceName FREEPDB1 -pdbName FREEPDB1 -sysPassword ******************* -silent -resume -sessionID 2
Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE1.log" for further details.
bash-4.4$
六:生成FREEPB1/SEVICE
podman run -td --name pri-db-free \
--hostname pri-db-free \
--net=tc_net \
--ip 192.168.168.10 \
-p :1521 \
--secret=oracle_pwd \
--add-host="tru-cc-free:192.168.168.20" \
-e ENABLE_ARCHIVELOG=true \
-e ENABLE_FORCE_LOGGING=true \
container-registry.oracle.com/database/free:latest
podman run -td --name tru-cc-free \
--hostname tru-cc-free \
--net=tc_net \
--ip 192.168.168.20 \
-p :1521 \
--secret=oracle_pwd \
--add-host="pri-db-free:192.168.168.10" \
-e TRUE_CACHE=true \
-e PRIMARY_DB_CONN_STR=192.168.168.10:1521/FREE \
-e PDB_TC_SVCS="FREEPDB1:sales1:sales1_tc;FREEPDB1:sales2:sales2_tc;FREEPDB1:sales3:sales3_tc;FREEPDB1:sales4:sales4_tc" \
container-registry.oracle.com/database/free:latest
修改容器内的密码
podman exec tru-cc-free ./setPassword.sh QAZwsx123456
七、连接到 Oracle Database Free
SQL
- 连接字符串格式:[username]@[hostname]:[port]/[DB service name] [AS SYSDBA]
- 要连接到每一个 Pluggable Database (PDB),请使用:
sqlplus sys@localhost:1521/FREEPDB1 as sysdba
- 要连接到 Container Database (CDB),请使用:
sqlplus sys@localhost:1521/FREE as sysdba
Java
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@localhost:1521/FREEPDB1"); // jdbc:oracle:thin@[hostname]:[port]/[DB service name]
ods.setUser("[Username]");
ods.setPassword("[Password]");
Connection conn = ods.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT 'Hello World!' FROM dual");
ResultSet rslt = stmt.executeQuery();
while (rslt.next()) {
System.out.println(rslt.getString(1));
}
八、检测 True Cache
--container模式在23.8.0.25.04这个版本有
SQL> col service_id set A20
SQL> col service for A20
SQL> col name for A20
SQL> col true_cache_service for A30
SQL> SELECT service_id, name, true_cache_service FROM v$active_services;
SERVICE_ID NAME TRUE_CACHE_SERVICE
---------- -------------------- ------------------------------
3 freeXDB
1 SYS$BACKGROUND
2 SYS$USERS
8 freepdb1
4 free