适用范围
Oracle Database 11g及以上版本
场景描述
日常生产环境中如果使用了ADG备库,在备库执行查询业务或部署同步工具,就使用到了temp表空间。如果备库temp临时表空间不足,如何进行扩容?

解决方案
11g,12c,19c的ADG环境中,standby_file_management设置为AUTO,主库表空间扩容后data file会自动同步到备库,TEMP表空间扩容tempfile不会自动同步到备库。23ai开始ADG环境中主库temp表空间扩容后temp file会自动同步到备库。
1、23ai以前的ADG环境(11g,12c,19c)
(1)检查数据库状态
连接到主库
SQL> select db_unique_name,name,open_mode,LOG_MODE,FLASHBACK_ON,database_role from v$database;
数据库运行在READ WRITE状态 datab_role是PRIMARY。
连接到备库
SQL> select db_unique_name,name,open_mode,LOG_MODE,FLASHBACK_ON,database_role from v$database;
数据库运行在READ ONLY WITH APPLY状态 datab_role是PHYSICAL STANDBY。
检查ADG同步状态
SQL> SELECT name, value, time_computed FROM v$dataguard_stats;
(2)检查tempfile
主备环境分别执行执行
set line 200 pages 200
col serial for 99
col CON_ID for 99
col container for a10
col OPEN_MODE for a10
col tablespace for a10
col temp_file for a80
select ROWNUM serial,c.CON_ID,c.NAME container,c.OPEN_MODE,ts.NAME tablespace,tf.NAME temp_file from v$containers c inner join v$tablespace ts on (c.con_id=ts.con_id) inner join v$tempfile tf on (ts.con_id=tf.con_id and ts.TS#=tf.TS#) order by con_id;
SERIAL CON_ID CONTAINER OPEN_MODE TABLESPACE TEMP_FILE
------ ------ ---------- ---------- ---------- -----------------------
1 1 CDB$ROOT READ WRITE TEMP /u01/app/oracle/oradata/CDB19C/temp01.dbf
2 2 PDB$SEED READ ONLY TEMP /u01/app/oracle/oradata/CDB19C/pdbseed/temp012021-07-24_11-15-20-214-AM.dbf
3 3 HRPDB READ WRITE TEMP /u01/app/oracle/oradata/CDB19C/hrpdb/temp012021-07-24_11-15-20-214-AM.dbf
4 6 RCATPDB READ WRITE TEMP /u01/app/oracle/oradata/CDB19C/rcatpdb/temp012021-07-24_11-15-20-214-AM.dbf
SYS@cdb19c(CDB$ROOT)>
(3)备库进行temp扩容
12c,19c切换到目标pdb
SQL> alter session set container = PDBHR;
SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/CDB19C/hrpdb/temp02.dbf' size 20G;
检查备库tempfile
set line 200 pages 200
col serial for 99
col CON_ID for 99
col container for a10
col OPEN_MODE for a10
col tablespace for a10
col temp_file for a80
select ROWNUM serial,c.CON_ID,c.NAME container,c.OPEN_MODE,ts.NAME tablespace,tf.NAME temp_file from v$containers c inner join v$tablespace ts on (c.con_id=ts.con_id) inner join v$tempfile tf on (ts.con_id=tf.con_id and ts.TS#=tf.TS#) order by con_id;
11g直接在备库temp进行扩容
SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/CDB19C/hrpdb/temp02.dbf' size 20G;
2、23ai ADG环境
23ai开始ADG环境主库temp表空间add tempfile可以自动同步到备库。
建议开启OMF管理,standby_file_management参数为AUTO
备库参数检查
SQL> select value from v$parameter where name='db_create_file_dest';
VALUE
---------------------------------------
+datadg
SQL> select value from v$parameter where name='standby_file_management';
VALUE
---------------------------------------
AUTO
【小结】19c及以前版本(11g,12c,19c)ADG环境主库temp表空间扩容后tempfile不能自动同步到备库,我们可以在ADG备库add tempfile完成扩容;23ai开始ADG环境主库temp表空间扩容tempfile可以自动同步到备库,这也是23ai ADG新特性之一,极大的方便了ADG环境备库temp表空间的管理。
-the end-




