oracle中创建临时表和创建普通表的区别

2024-11-23 11:44:14
推荐回答(3个)
回答1:

不是表,是表空间概念吧。表空间(tablespace)是Oracle数据库最高一级的逻辑存储单元,每个表空间对应磁盘上的一个或多个数据文件,用于将其它的逻辑结构(段、区、块)进行分组,以便于数据的组织和管理,比如DBA可以动态关闭启用某个特定的表空间(表空间脱机/联机),实现以表空间为单位的访问控制。表空间类似于Java语言中的包(package),可以理解为一种最高级别的命名空间。Oracle数据库中的表空间根据保存信息的性质可分为系统表空间、数据表空间、索引表空间、临时表空间等多种。每个Oracle数据库都至少拥有一个表空间——系统表空间,用于存储Oracle的数据字典信息和pl/sql程序单元(存储过程、函数、触发器等)的源代码和编译后的目标代码。也可以根据需要创建新的表空间来保存用户数据。新建数据库对象(如表或索引)时,应制定在哪一个表空间中存储该对象,如果没有显式制定,则系统会将新建对象保存在当前用户的默认表空间中,默认表空间在用户账号创建时制定,也可以在事后修改其设置,Oracle建议将不同性质的数据(比如不同应用程序所使用的数据)保存到不同的表空间,这样有助于提高数据访问性能以及数据的管理,如备份、恢复等操作。这些没有运行周期的概念。关于临时表空间的实际用法和解释参照http://database.51cto.com/art/201001/180851.htm

回答2:

临时表是只有创建的用户才可以使用的,用户退出或事务结束时(具体看on commit 选项)自动删除该表,也可以手动drop。create global temporary table ...,具体的创建语法还有很多选项,你可以参考ORACLE SQL References.对普通表的DML,建触发器等操作同样适合临时表,与普通表不同的是,临时表使用的是PGA,如果PGA空间不够了才会使用临时表空间。

回答3:

对全局临时表的总结
在临时表上的操作比在一般的表上的操作要快。因为:
1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。
2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。
3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));
在CONNECT RESET命令后,临时表不再存在。
建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面
CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) %
INSERT INTO SESSION.TT VALUES(P1, P2);
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT;
END;
END %
2。事务特有的临时表
CREATE GLOBAL TEMPORARY ()
ON COMMIT DELETE ROWS;
在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit delete rows使数据仅在事物内部有效。