oracle global temporary table全局临时表_测试及v$tempseg_usage

SQL> create global temporary table test_global_temp as select * from t_only where rownum<1000;--采用as创建全局临时表,全局临时表

虽然建表成功,但表中没有数据的

Table created.
SQL> select table_name,temporary,duration from user_tables where table_name=upper('test_global_temp');--默认创建的全局临时表是基

于事务的(就是发布rollback or commit表中就会清除记录),请注意duration列

TABLE_NAME                     T DURATION
------------------------------ - ---------------
TEST_GLOBAL_TEMP               Y SYS$TRANSACTION

SQL> select count(*) from test_global_temp;
SQL> insert into test_global_temp  select * from t_only where rownum<100000;--建好临时表可以用insert into全局临时表 select 来导入

插入数据

99999 rows created.

SQL> /

99999 rows created.

SQL> select count(*) from test_global_temp; --批量插入2次数据到全局临时表

  COUNT(*)
----------
    199998

SQL> select segment_name,bytes/1024/1024 from user_segments where segment_name='T_TEMP_SIZE';--t_temp_size为全局临时表的备份表,

为了测试全局临时表占用数据的大小

SEGMENT_NAME                                                                      BYTES/1024/1024
--------------------------------------------------------------------------------- ---------------
T_TEMP_SIZE                                                                                    12

 


SQL> select * from v$tempseg_usage;--请注意这里的blocks,这是为临时表分配的block个数

SQL> select * from v$tempseg_usage; ##segtype表示临时segment的类型,有sort,hash,data,index,lob_data,lob_index,还有

session_addr,sqladdr,sql_id,sqlhash,可以由此提取v$session或v$sql,从而抽取对应session及sql

USERNAME                       USER                           SESSION_ADDR
------------------------------ ------------------------------ ----------------
SESSION_NUM SQLADDR             SQLHASH SQL_ID
----------- ---------------- ---------- -------------
TABLESPACE                      CONTENTS  SEGTYPE     SEGFILE#    SEGBLK#
------------------------------- --------- --------- ---------- ----------
   EXTENTS     BLOCKS   SEGRFNO#
---------- ---------- ----------
SCOTT                          SCOTT                          00000000677D9D30
         17 0000000067127648 1029988163 9babjv8yq8ru3
TEMP                            TEMPORARY DATA             201       8457
        11       1408          1


SQL> select 1408*8/1024 from dual;---这里根据以上v$tempseg_usage的blocks换算出来也是近12m

1408*8/1024
-----------
         11


目的:为了测试临时表占用空间的大小

 

 

 

#####学习全局临时表两种类型(基于会话和基于事务)


SQL> create global temporary table test_global_temp(a int,b int) on commit delete rows;--基于事务

Table created.

SQL> select table_name,duration,temporary from user_tables where table_name='TEST_GLOBAL_TEMP';

TABLE_NAME                     DURATION        T
------------------------------ --------------- -
TEST_GLOBAL_TEMP               SYS$TRANSACTION Y

SQL> insert into test_global_temp values(1,1);

1 row created.

SQL> select count(*) from test_global_temp;

  COUNT(*)
----------
         1

SQL> commit;--一提交

Commit complete.

SQL> select count(*) from test_global_temp;--没有记录了

  COUNT(*)
----------
         0

SQL>
SQL>
SQL> drop table test_global_temp purge;

Table dropped.

SQL> create global temporary table test_global_temp(a int,b int) on commit preserve rows;-创建基于会话的临时表

Table created.

SQL> select table_name,duration,temporary from user_tables where table_name='TEST_GLOBAL_TEMP';

TABLE_NAME                     DURATION        T
------------------------------ --------------- -
TEST_GLOBAL_TEMP               SYS$SESSION      ---基于会话的   Y

SQL> insert into test_global_temp values(1,1);

1 row created.

SQL> select count(*) from test_global_temp;--未提交前有数据

  COUNT(*)
----------
         1

SQL> commit;---提交

Commit complete.

SQL> select count(*) from test_global_temp;--还有数据

  COUNT(*)
----------
         1

SQL> conn /as sysdba
Connected.
SQL> conn scott/system  --退出会话,再新建一个会话
Connected.
SQL> select count(*) from test_global_temp;--没有数据了

  COUNT(*)
----------
         0

SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-672050/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-672050/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值