本文主要是介绍【DM8】临时表空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
临时表分类
- 事务级临时表
- 会话级临时表
- 临时表,可以像普通表一样插入、更新和删除数据
- 临时表的DML操作产生较少的redo日志
- 临时表支持创建索引,以提高查询性能
- 在一个会话或事务结束之后,数据将自动从临时表中删除
- 不同的用户访问相同的临时表,每个用户只看到自己的数据
- 临时表的表结构在数据删除之后仍然存在
- 临时表的权限管理和普通表一样
创建临时表
创建事务级的临时表
CREATE GLOBAL TEMPORARY TABLE TEST.tmp_t1(id int) ON COMMIT DELETE ROWS;
INSERT INTO TEST.TMP_T1 VALUES(1);
INSERT INTO TEST.TMP_T1 VALUES(2);
INSERT INTO TEST.TMP_T1 VALUES(3);
SELECT * from TEST.TMP_T1;
创建会话级别的临时表
CREATE GLOBAL TEMPORARY TABLE TEST.tmp_t2(id int) ON COMMIT PRESERVE ROWS;
INSERT INTO TEST.TMP_T2 VALUES(10);
INSERT INTO TEST.TMP_T2 VALUES(20);
INSERT INTO TEST.TMP_T2 VALUES(30);
SELECT * from TEST.TMP_T2;
查询临时表空间的信息
SELECT i.para_name,i.para_value from v$dm_ini i WHERE i.PARA_NAME LIKE '%TEMP%';
调整临时表空间的大小
TEMP_SIZE是静态参数,调整大小后需要重启数据库实例
sp_set_para_value(2,'TEMP_SIZE',200);
重启数据库后重连
查看大小
SELECT i.para_name,i.para_value from v$dm_ini i WHERE i.PARA_NAME LIKE '%TEMP%';
临时表清空
临时表清空,临时表空间文件在磁盘所占大小并不会因此缩减
验证:
在TEST.TMP_T1里面插入10000000条数据
BEGIN
FOR i IN 1..10000000 LOOP
INSERT INTO TEST.TMP_T1 VALUES(i);
end loop;
end;
查看表空间大小
SELECT i.para_name,i.para_value from v$dm_ini i WHERE i.PARA_NAME LIKE '%TEMP%';
查看实际表空间文件大小
SELECT df.TABLESPACE_NAME,df.FILE_NAME,df.BYTES/1024/1024 FROM SYS.DBA_DATA_FILES df WHERE DF.TABLESPACE_NAME='TEMP';
删除表
drop TABLE test.TMP_T1;
查看表空间大小 不变
SELECT df.TABLESPACE_NAME,df.FILE_NAME,df.BYTES/1024/1024 FROM SYS.DBA_DATA_FILES df WHERE DF.TABLESPACE_NAME='TEMP';
释放临时表占用的物理磁盘空间
sp_trunc_ts_file是之前版本的方式,现在的版本测试发现搞不了,以下记录该方式的逻辑
sp_trunc_ts_file(a,b,c)
a 指定临时表空间的id
b 指定文件的id
c 将文件截断至多少
查看a,b参数
SELECT f.GROUP_ID,f.ID,f.PATH FROM sys.v$datafile f;
释放至200
sp_trunc_ts_file(3,0,200);
现在的版本应该是直接修改temp下的dbf文件大小
alter tablespace "TEMP" resize datafile 'TEMP.DBF' to 200;
这篇关于【DM8】临时表空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!