临时表

1.创建会话级临时表:on commit preserve rows

SQL> create global temporary  table temp_table_test on commit preserve rows as select * from dba_tables where rownum=0 ;

Table created.

SQL> select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1

sql:3pm8w2cguvmn6 是假的,见下面
         
–插入
SQL> insert into temp_table_test select * from dba_tables;

2836 rows created.

—查询临时表使用
SQL> select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943AA298
        409 000000008CFB6D68 3925001498 b5cx7xgnz5j8u
TEMP02                          TEMPORARY DATA             202        384
         1        128          1

多了一个sql:b5cx7xgnz5j8u

–提交
SQL> commit;

Commit complete.

–查询临时表空间
SQL>  select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name=’TEMP_TABLE_TEST';

TABLE_NAME                     TABLESPACE_NAME                STATUS
—————————— —————————— ——–
TEMP_TABLE_TEST                                               VALID

–退出会话:
SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@slient ~]$

–开启一个新会话:
[oracle@slient ~]$  sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Sep 1 15:59:32 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

–查询临时表的数据(已经没有了,因为是会话级别,退出就truncate了)
SQL> select count(*) from TEMP_TABLE_TEST;

  COUNT(*)
———-
         0

–查询
SQL> select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1
此SQL:3pm8w2cguvmn6还在,假的

–查询临时表对应表空间:
SQL> select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name=’TEMP_TABLE_TEST';

TABLE_NAME                     TABLESPACE_NAME                STATUS
—————————— —————————— ——–
TEMP_TABLE_TEST                                               VALID

2.创建事物级临时表:On Commit Delete Rows

SQL>  create global temporary  table temp on commit delete rows as select * from dba_objects where 1=2;

Table created.

SQL>  select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1

SQL> insert into temp select * from dba_objects;

86446 rows created.

SQL>
SQL> select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943AA298
        411 000000008CDEAFE0 3250818709 02yb6fb0w73np
TEMP02                          TEMPORARY DATA             202        384
        10       1280          1
同理、、、、、、、、、、、

SQL> select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name=’TEMP';

TABLE_NAME                     TABLESPACE_NAME                STATUS
—————————— —————————— ——–
TEMP_TABLE_TEST                                               VALID

–提交
SQL> commit;

Commit complete.

–查询因为事物级临时表commit后就truncate了
SQL> select * from temp;

no rows selected

SQL> select * from v$tempseg_usage;

USERNAME                       USER                           SESSION_ADDR
—————————— —————————— —————-
SESSION_NUM SQLADDR             SQLHASH SQL_ID
———– —————- ———- ————-
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
——————————- ——— ——— ———- ———-
   EXTENTS     BLOCKS   SEGRFNO#
———- ———- ———-
SYS                            SYS                            00000000943D1DF8
        189 00000000883CC3E0  531484294 3pm8w2cguvmn6
TEMP02                          TEMPORARY DATA             202        256
         1        128          1

SQL> select TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where table_name=’TEMP';           

TABLE_NAME                     TABLESPACE_NAME                STATUS
—————————— —————————— ——–
TEMP                                                          VALID

SQL>

PS:如果您想和业内技术大牛交流的话,请加qq群(527933790)或者关注微信公众 号(AskHarries),谢谢!

转载请注明原文出处:Harries Blog™ » 临时表

赞 (0)

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址