必须为每个rac实例单独创建本地临时表空间,路径需带实例标识(如'+datadg/racdb_inst1/temp01.dbf'),禁用omf,逐实例执行alter database default temporary tablespace并验证diskgroup全节点挂载。
必须为每个rac实例单独创建本地临时表空间,不能共用、不能混用、不能靠组名“假装隔离”。 rac中临时段物理上不跨实例共享,即使default_temp_tablespace指向同一组名,实际只用本实例能访问的tempfile——若路径未隔离或asm diskgroup挂载不全,立刻触发ora-01157或ora-1652。
为什么查gv$sort_segment会误判负载情况
直接查gv$sort_segment看到某个表空间USED_EXTENTS高,不代表它真“忙”,而是你没按实例切片。RAC下每个实例维护自己的排序段,v$sort_segment只反映当前连接实例的状态;跨节点比较必须用gv$sort_segment并显式GROUP BY inst_id, tablespace_name。否则你会以为TEMP_INST2空闲,其实它在inst2上已满,而inst1还在往TEMP_INST1猛写。
- 错误写法:
SELECT tablespace_name, SUM(used_extents) FROM gv$sort_segment GROUP BY tablespace_name—— 混淆实例边界 - 正确写法:
SELECT inst_id, tablespace_name, used_extents FROM gv$sort_segment ORDER BY inst_id, used_extents DESC - 常见误判根源:DBA在节点1上连进SQL*Plus查
v$sort_segment,发现全是0,就认为“TEMP没压力”,却不知inst2上gv$sort_segment里TEMP_INST2的USED_EXTENTS已超95%
创建实例专属临时表空间的关键实操点
不是“建个表空间加进组”就完事,路径、权限、状态三者必须同时满足本地化要求。
- ASM路径必须带实例标识:
'+DATADG/racdb_inst1/temp01.dbf',禁止用'+DATADG/racdb/temp01.dbf'——否则多个实例启动时争抢同一文件句柄 - 显式指定
TABLESPACE GROUP,但组名只是逻辑标签:CREATE TEMPORARY TABLESPACE temp_inst1 TEMPFILE '+DATADG/racdb_inst1/temp01.dbf' SIZE 2G TABLESPACE GROUP 'TEMP_GROUP' - 建完立刻验证:
SELECT tablespace_name, status, enabled FROM dba_temp_files WHERE tablespace_name = 'TEMP_INST1'——status必须是ONLINE,enabled必须是YES - 禁用OMF(Oracle Managed Files):OMF默认生成路径不区分实例,
ALTER SYSTEM SET db_create_file_dest=''再操作更安全
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE只作用于当前实例
这个命令不会广播,也不会同步到其他节点。你在inst1上执行ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_inst1,inst2的database_properties里DEFAULT_TEMP_TABLESPACE值完全不变。
- 必须逐实例登录后执行:
srvctl stop instance -d racdb -i inst1 && sqlplus / as sysdba→ 执行alter → 同样流程对inst2 - 验证是否生效:在每个实例上分别运行
SELECT property_value FROM database_properties WHERE property_name = 'DEFAULT_TEMP_TABLESPACE',不能依赖dba_properties或gv$视图 - 典型翻车场景:DBA在inst1上改完,查
dba_tablespace_groups看到TEMP_INST1和TEMP_INST2都在TEMP_GROUP里,就以为“自动均衡了”,结果所有新session仍挤在inst1的TEMP_INST1上——因为inst2的default还是SYSTEM或旧TEMP
真正容易被忽略的是tempfile的ASM diskgroup挂载状态:哪怕表空间建在+DATADG,也得确认该diskgroup在所有RAC节点上都MOUNTED且READ WRITE。用asmcmd lsdg逐节点检查,别只信OCR里的配置。一个节点没挂载,那个实例启动就报ORA-01157,后续所有排序操作都会失败。











