12.2如果是FLEX集群,可以在LEAF NODE创建read only实例,从而引入了local temp表空间的概念。
local temp和local undo的概念不一样,首先pdb必须使用自己的temp表空间,local temp指的是RAC环境下,可以在各自的节点上创建local temp表空间,拥有各自的temp表空间就跟拥有各自的PGA一样,对于只读节点来说大的排序需要用到temp时就不需要去看这块空间另外一个节点有没有使用,另外避免了两边同时使用temp表空间产生的争用。
首先,PDB不能使用CDB的temp表空间,PDB和CDB上temp视图查出来的结果都不一样:
[code]SQL> alter session set container=pdb1;
Session altered.
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
SQL> create temporary tablespace temp2 tempfile '/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf' size 10m;
Tablespace created.
SQL> alter database default temporary tablespace temp2;
Database altered.
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped.
SQL> alter database default temporary tablespace temp;
alter database default temporary tablespace temp
*
ERROR at line 1:
ORA-00959: tablespace 'TEMP' does not exist
SQL> col FILE_NAME for a50
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
-------------------------------------------------- ------------------------------ ------------- ----------
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf TEMP2 SHARED
SQL> conn / as sysdba
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
-------------------------------------------------- ------------------------------ ------------- ----------
/u04/app/oracle/oradata/temp/temp01.dbf TEMP SHARED[/code]
dba_temp_files的SHARED字段中表明了类型,local有两种类型,RIM是read_only实例,ALL是所有实例
SHARED: for shared temporary tablespace
LOCAL_ON_ALL: for local temporary tablespace on all instances
LOCAL_ON_RIM: for local temporary tablespace on read-only instances
官方给的创建语句又两处问题,一是未指定tempfile的大小,二是local temp是BIGFILE类型,所以不能指定AUTOEXTEND,也不能添加第二个tempfile。
先来看LOCAL_ON_ALL,创建语句如下,(由于没有RAC环境只能在单实例上测试)
[code]SQL> CREATE LOCAL TEMPORARY TABLESPACE FOR all local_temp_ts_for_all TEMPFILE '/u04/app/oracle/oradata/orasql2/temp_file_all.dbf' size 10m EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> select name ,BIGFILE from v$tablespace;
NAME BIG
------------------------------ ---
SYSTEM NO
SYSAUX NO
UNDOTBS1 NO
USERS NO
TEMP2 NO
LOCAL_TEMP_TS_FOR_ALL YES
6 rows selected.
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u04/app/oracle/oradata/orasql2/temp_file_all.dbf
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
------------------------------------------------------------ ------------------------------ ------------- ----------
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf TEMP2 SHARED
/u04/app/oracle/oradata/orasql2/temp_file_all.dbf_1 LOCAL_TEMP_TS_FOR_ALL LOCAL_ON_ALL 1
[oracle@orasql2 ~]$ ls -l /u04/app/oracle/oradata/orasql2/temp_file_all.*
-rw-r----- 1 oracle oinstall 10493952 Nov 23 14:37 /u04/app/oracle/oradata/orasql2/temp_file_all.dbf_1[/code]
从上面可以看到,理论上会创建各自的tempfile,在指定文件名结尾加上_1和_2,但是不知V$TEMPFILE视图中为什么没有标明详细的文件名。
LOCAL_ON_RIM由于需要read only的实例,创建会报错ORA-32778
[oracle@orasql2 ~]$ oerr ORA 32778
32778, 00000, "DDL operations are disabled on local temporary tablespaces FOR LEAF."
// *Cause: A DDL operation on a local temporary tablespace FOR LEAF was
// attempted in a system without any read-only running instances.
// *Action: Add at least one read-only instance to the cluster.
read writ的实例会优先使用shared的临时表空间,再使用local的临时表空间
read only的实例优先使用local的临时表空间,再使用shared的临时表空间
其他操作都类似,具体可以参考官方文档
http://docs.oracle.com/database/122/RACAD/introduction-to-oracle-rac.htm#RACAD-GUID-E84E3BA2-7F36-406B-B630-CD651E0C856F
local temp和local undo的概念不一样,首先pdb必须使用自己的temp表空间,local temp指的是RAC环境下,可以在各自的节点上创建local temp表空间,拥有各自的temp表空间就跟拥有各自的PGA一样,对于只读节点来说大的排序需要用到temp时就不需要去看这块空间另外一个节点有没有使用,另外避免了两边同时使用temp表空间产生的争用。
首先,PDB不能使用CDB的temp表空间,PDB和CDB上temp视图查出来的结果都不一样:
[code]SQL> alter session set container=pdb1;
Session altered.
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
SQL> create temporary tablespace temp2 tempfile '/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf' size 10m;
Tablespace created.
SQL> alter database default temporary tablespace temp2;
Database altered.
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped.
SQL> alter database default temporary tablespace temp;
alter database default temporary tablespace temp
*
ERROR at line 1:
ORA-00959: tablespace 'TEMP' does not exist
SQL> col FILE_NAME for a50
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
-------------------------------------------------- ------------------------------ ------------- ----------
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf TEMP2 SHARED
SQL> conn / as sysdba
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
-------------------------------------------------- ------------------------------ ------------- ----------
/u04/app/oracle/oradata/temp/temp01.dbf TEMP SHARED[/code]
dba_temp_files的SHARED字段中表明了类型,local有两种类型,RIM是read_only实例,ALL是所有实例
SHARED: for shared temporary tablespace
LOCAL_ON_ALL: for local temporary tablespace on all instances
LOCAL_ON_RIM: for local temporary tablespace on read-only instances
官方给的创建语句又两处问题,一是未指定tempfile的大小,二是local temp是BIGFILE类型,所以不能指定AUTOEXTEND,也不能添加第二个tempfile。
先来看LOCAL_ON_ALL,创建语句如下,(由于没有RAC环境只能在单实例上测试)
[code]SQL> CREATE LOCAL TEMPORARY TABLESPACE FOR all local_temp_ts_for_all TEMPFILE '/u04/app/oracle/oradata/orasql2/temp_file_all.dbf' size 10m EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> select name ,BIGFILE from v$tablespace;
NAME BIG
------------------------------ ---
SYSTEM NO
SYSAUX NO
UNDOTBS1 NO
USERS NO
TEMP2 NO
LOCAL_TEMP_TS_FOR_ALL YES
6 rows selected.
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u04/app/oracle/oradata/orasql2/temp_file_all.dbf
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf
SQL> select FILE_NAME,TABLESPACE_NAME,SHARED,INST_ID from dba_temp_files;
FILE_NAME TABLESPACE_NAME SHARED INST_ID
------------------------------------------------------------ ------------------------------ ------------- ----------
/u04/app/oracle/oradata/orasql2/PDB1/temp01.dbf TEMP2 SHARED
/u04/app/oracle/oradata/orasql2/temp_file_all.dbf_1 LOCAL_TEMP_TS_FOR_ALL LOCAL_ON_ALL 1
[oracle@orasql2 ~]$ ls -l /u04/app/oracle/oradata/orasql2/temp_file_all.*
-rw-r----- 1 oracle oinstall 10493952 Nov 23 14:37 /u04/app/oracle/oradata/orasql2/temp_file_all.dbf_1[/code]
从上面可以看到,理论上会创建各自的tempfile,在指定文件名结尾加上_1和_2,但是不知V$TEMPFILE视图中为什么没有标明详细的文件名。
LOCAL_ON_RIM由于需要read only的实例,创建会报错ORA-32778
[oracle@orasql2 ~]$ oerr ORA 32778
32778, 00000, "DDL operations are disabled on local temporary tablespaces FOR LEAF."
// *Cause: A DDL operation on a local temporary tablespace FOR LEAF was
// attempted in a system without any read-only running instances.
// *Action: Add at least one read-only instance to the cluster.
read writ的实例会优先使用shared的临时表空间,再使用local的临时表空间
read only的实例优先使用local的临时表空间,再使用shared的临时表空间
其他操作都类似,具体可以参考官方文档
http://docs.oracle.com/database/122/RACAD/introduction-to-oracle-rac.htm#RACAD-GUID-E84E3BA2-7F36-406B-B630-CD651E0C856F
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




