12C關於CDB、PDB 臨時temp表空間的總結

lusklusklusk發表於2020-02-13

官方文件


1、每個容器都有屬於的自己的temp表空間,PDB不共享CDB的temp表空間,CDB有自己的temp表空間,每個PDB也有自己的tmep表空間

2、當前容器下建立的tempfile只屬於當前容器的temp表空間, 也就是說CDB下建立的tempfile只屬於CDB,某個PDB建立的tempfile只屬於這個PDB自己

3、 當前容器 可以刪除CDB和任意PDB的tempfile,也就是說CDB可以刪除任意PDB的tempfile,PDB也可以刪除CDB和任意PDB的tempfile

4、我們平時所說的temp表空間不做特殊說明就是指共享臨時表空間,12.2開始引入了"本地臨時表空間"的概念,"本地臨時表空間"必須是BIGFILE表空間並且不支援tablespace groups表空間組的形式,幾乎很少情況下會用到"本地臨時表空間",一般沒什麼大用,主要用於Oracle Real Application ClustersOr和acle Flex Clusters

5、CDB和任意PDB都可以建立本地臨時表空間,建立本地臨時表空間和建立普通臨時表空間語法上沒什麼區別,就是TEMPORARY TABLESPACE前面多一個"local",後面多一個"FOR ALL"或"FOR LEAF"

6、臨時檔案不能被備份並且沒有任何redo資訊產生,因此RMAN不會還原或恢復臨時檔案



SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         4 POCP2                          READ WRITE NO

         5 POCP999                        READ WRITE NO


SQL> select FILE_NAME,CON_ID from cdb_temp_files;

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_2.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5

/u02/data/test/temp_pocp999_02.dbf                          5


SQL> alter tablespace temp add tempfile '/u02/data/test/temp_root1_2.dbf' size 10M;


SQL> select FILE_NAME,CON_ID from cdb_temp_files; --當前CDB新增加的tempfile只能加入當前CDB

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_root1_2.dbf                             1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_2.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5

/u02/data/test/temp_pocp999_02.dbf                          5



SQL> alter session set container=POCP2;


SQL> alter tablespace temp add tempfile '/u02/data/test/temp_pocp2_3.dbf' size 10M;


SQL> select FILE_NAME,CON_ID from cdb_temp_files;--當前PDB新增加的tempfile只能加入當前PDB

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_2.dbf                             4

/u02/data/test/temp_pocp2_3.dbf                             4


SQL> alter session set container=CDB$ROOT;


SQL> select FILE_NAME,CON_ID from cdb_temp_files;

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_root1_2.dbf                             1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_2.dbf                             4

/u02/data/test/temp_pocp2_3.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5

/u02/data/test/temp_pocp999_02.dbf                          5


SQL> alter tablespace temp drop tempfile '/u02/data/test/temp_pocp2_2.dbf';--CDB可以刪除PDB的tempfile


SQL> select FILE_NAME,CON_ID from cdb_temp_files;

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_root1_2.dbf                             1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_3.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5

/u02/data/test/temp_pocp999_02.dbf                          5


SQL> alter session set container=POCP2;


SQL> alter tablespace temp drop tempfile '/u02/data/test/temp_root1_2.dbf'; --PDB可以刪除CDB的tempfile


SQL> select FILE_NAME,CON_ID from cdb_temp_files;

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_3.dbf                             4


SQL> alter session set container=CDB$ROOT;


SQL> select FILE_NAME,CON_ID from cdb_temp_files;


FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_3.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5

/u02/data/test/temp_pocp999_02.dbf                          5


SQL> alter session set container=pocp2;


SQL> alter tablespace temp drop tempfile '/u02/data/test/temp_pocp999_02.dbf';

--PDB可以刪除其他PDB的tempfile


SQL> alter session set container=CDB$ROOT;


SQL> select FILE_NAME,CON_ID from cdb_temp_files;

FILE_NAME                                              CON_ID

-------------------------------------------------- ----------

/u02/data/test/temp_root1.dbf                               1

/u02/data/test/temp_pocp2.dbf                               4

/u02/data/test/temp_pocp2_3.dbf                             4

/u02/data/test/temp_pocp999.dbf                             5



SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT


SQL> CREATE LOCAL TEMPORARY TABLESPACE for leaf temp_local tempfile '/u02/data/test/temp_local_root1.dbf' size 10M;

CREATE LOCAL TEMPORARY TABLESPACE for leaf temp_local tempfile '/u02/data/test/temp_local_root1.dbf' size 10M

                                      *

ERROR at line 1:

ORA-32778: DDL operations are disabled on local temporary tablespaces FOR LEAF.



SQL> CREATE LOCAL TEMPORARY TABLESPACE for all temp_local tempfile '/u02/data/test/temp_local_root1.dbf' size 10M;

Tablespace created.


SQL> select tablespace_name,extent_management,bigfile,shared,con_id from cdb_tablespaces where contents='TEMPORARY';

TABLESPACE_NAME                EXTENT_MAN BIG SHARED            CON_ID

------------------------------ ---------- --- ------------- ----------

TEMP                           LOCAL      NO  SHARED                 1

TEMP_LOCAL                     LOCAL      YES LOCAL_ON_ALL           1

TEMP                           LOCAL      NO  SHARED                 4

TEMP                           LOCAL      NO  SHARED                 5


SQL> select file_name,tablespace_name,shared,inst_id,con_id from cdb_temp_files;

FILE_NAME                                TABLESPACE_NAME SHARED           INST_ID     CON_ID

---------------------------------------- --------------- ------------- ---------- ----------

/u02/data/test/temp_local_root1.dbf_1    TEMP_LOCAL      LOCAL_ON_ALL           1          1

/u02/data/test/temp_root1.dbf            TEMP            SHARED                            1

/u02/data/test/temp_pocp2.dbf            TEMP            SHARED                            4

/u02/data/test/temp_pocp2_3.dbf          TEMP            SHARED                            4

/u02/data/test/temp_pocp999.dbf          TEMP            SHARED                            5


SQL> alter session set container=pocp2;


SQL> CREATE LOCAL TEMPORARY TABLESPACE for all temp_local_pocp2 tempfile '/u02/data/test/temp_local_pocp2_1.dbf' size 10M;

Tablespace created.


SQL> select file_name,tablespace_name,shared,inst_id,con_id from cdb_temp_files;

FILE_NAME                                TABLESPACE_NAME      SHARED           INST_ID     CON_ID

---------------------------------------- -------------------- ------------- ---------- ----------

/u02/data/test/temp_local_pocp2_1.dbf_1  TEMP_LOCAL_POCP2     LOCAL_ON_ALL           1          4

/u02/data/test/temp_pocp2.dbf            TEMP                 SHARED                            4

/u02/data/test/temp_pocp2_3.dbf          TEMP                 SHARED                            4







Starting with Oracle Database 12c Release 2 (12.2), local temporary tablespaces are available. A local temporary tablespace stores separate, non-shared temp files for every database instance. A local temporary tablespace is used only for spilling temporary results of SQL statements, such as queries that involve sorts, hash aggregations, and joins. These results are only accessible within an instance. In contrast, a shared temporary tablespace resides on a shared disk and is available to all instances. To create a local temporary tablespace, use a CREATE LOCAL TEMPORARY TABLESPACE statement. Shared temporary tablespaces were available in prior releases of Oracle Database and were called "temporary tablespaces." In this Oracle Database Administrator’s Guide, the term "temporary tablespace" refers to a shared temporary tablespace unless specified otherwise.


Note:Local temporary tablespaces are new in Oracle Database 12c Release 2 (12.2). In previous releases, shared temporary tablespaces were simply called temporary tablespaces. Starting in this release, the term temporary tablespace refers to a shared temporary tablespace unless specified otherwise.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2675527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章