`

orcale临时表与锁的创建

阅读更多


近来用到了oracle的临时表和锁,所以在这里简单总结一下。
加锁主要是为了防并发,临时表也可以用于防并发。

关于oracle的锁详细用法可以参见这个博客:
http://book.51cto.com/art/200806/75658.htm

加锁sql  ---lock table maintms_locktable in exclusive mode--这是表级锁
 
对表用了独占模式。可根据需要用不同的模式。对表,行,或者字段。

select * from table for update  这是行级锁。

create table maintms_locktable (mainid varchar2(30));

insert into maintms_locktable values('maintmstable');


select * from maintms_locktable --for update

可用sql建表去做简单比较。

----查看锁表进程SQL语句1:
select sess.sid,
    sess.serial#,
    lo.oracle_username,
    lo.os_user_name,
    ao.object_name,
    lo.locked_mode
    from v$locked_object lo,
    dba_objects ao,
    v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

----杀掉锁表进程:

alter   system     kill   session   'sid,serial#';

----如有记录则表示有lock,记录下SID和serial# ,将二者连接起来,就可以kill。如下:
alter system kill session '887,1672';

oracle有两种级别的临时表,会话级和事务级。
--------会话级临时表--------------
create global temporary table temp_tbl(col_a varchar2(30)) on commit preserve rows

insert into temp_tbl values('test session table')

    select *from temp_tbl2

---------事务级临时表-----------

Create Global Temporary Table Table_Name

(Col1 Type1,Col2 Type2...) On Commit Delete Rows ;



== 两中类型临时表的区别

会话级临时表采用 on commit preserve rows ;而事务级则采用 on commit delete rows ;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是 commit 、 rollback 或者是会话结束,Oracle临时表中的数据都将被截断

==什么时候使用临时表

1 当某一个 SQL 语句关联的表在 2 张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中

2 程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。


==临时表的不足之处

1 不支持 lob 对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。

2 不支持主外键关系

所以,由于以上原因,我们可以自己创建Oracle临时表,以弥补 Oracle 临时表的不足之处

上面的都是本人经过测试的,但下面是在网上搜索到的方法,本人具体没有测试过,不过觉得可行性很强,有时间测试下

创建方法:

1 、以常规表的形式创建临时数据表的表结构,但要在每一个表的主键中加入一个 SessionID <NUMBER> 列以区分不同的会话。(可以有 lob 列和主外键)

2 、写一个用户注销触发器,在用户结束会话的时候删除本次会话所插入的所有记录 (SessionID 等于本次会话 ID 的记录 ) 。

3 、程序写入数据时,要顺便将当前的会话 ID(SessionID) 写入表中。

4 、程序读取数据时,只读取与当前会话 ID 相同的记录即可。

功能增强的扩展设计:

1 、可以在数据表上建立一个视图,视图对记录的筛选条件就是当前会话的SessionID 。

2 、数据表中的SessionID 列可以通过Trigger 实现,以实现对应用层的透明性。

3 、高级用户可以访问全局数据,以实现更加复杂的功能。

扩展临时表的优点:

1 、实现了与Oracle 的基于会话的Oracle临时表相同的功能。

2 、支持SDO_GEOMETRY 等lob 数据类型。

3 、支持表间的主外键连接,且主外键连接也是基于会话的。

4 、高级用户可以访问全局数据,以实现更加复杂的功能


分享到:
评论

相关推荐

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    临时表空间的管理 数据文件管理 第17章-与数据库安全性有关的对象 用户管理 权限管理 角色管理 概要文件PROFILE 第18章-备份与恢复 数据库备份与恢复 物理备份和恢复数据库 逻辑备份和恢复数据库 本章小结 第...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    15.3.4临时表空间的调整 15.3.5日志文件的调整 15.3.6 UNDO表空间的调整 15.4应用系统 15.4.1应用拆分 15.4.2 SQL执行过程 15.4.3 SQL解析 15.4.4 SQL优化 15.4.5 SQL行源生成 15.4.6 SQL执行 15.5本章小...

    ORACLE9i_优化设计与系统调整

    §9.4.4 临时表空间设计规划 100 §9.4.5 数据文件和日志文件在不同磁盘上 101 §9.5 数据库物理设计 101 §9.5.1 定量估计 101 §9.5.2 表空间与数据文件 102 §9.5.3 物理设计原则 103 §9.5.4 数据库物理设计内容...

    Oracle日常维护故障定位故障排除

    3 由于临时表空间无法扩展导致数据库被挂起 4由于未打补丁导致RMAN备份时将数据库挂起 5由于BLOB类型的表记录数太多操作又太频繁导致数据库效率急差 6由于未对特大表(达到或超过100万条记录)定期做表分析导致...

    Oracle 主要配置文件介绍

    也可以 设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII &lt;br&gt;1.2.2 /etc/oratab 文件 /etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    Oracle数据库管理员技术指南

    7.8.7 恢复丢失的临时表空间 7.8.8 只读表空间丢失 7.8.9 索引表空间丢失 7.9 恢复联机重做日志 7.9.1 联机重做日志组某个成员丢失 7.9.2 非活动的重做日志组丢失 7.9.3 活动重做日志组丢失 7.10 恢复丢失的...

    深入解析Oracle.DBA入门进阶与诊断案例

    6.2.12 诊断案例二:临时表引发的竞争 297 6.2.13 小结 299 第7章 重做(Redo) 300 7.1 Redo的作用 300 7.2 Redo的原理 301 7.3 Redo与Latch 302 7.4 Oracle 9i Redo的增强 303 7.5 Oracle 10g Redo...

    oracle SQL命令大全

    truncate table 表名 (删除表中记录时释放表空间) DML 语句: 表级共享锁: 对于操作一张表中的不同记录时,互不影响 行级排它锁:对于一行记录,oracle 会只允许只有一个用户对它在同一时间进行修改操作 wait() ...

    oracle学习笔记之_用户 口令 权限

    2、用户登录 3:显示用户:show user 4、创建用户 5、查看用户信息【用户名、所在表空间、临时表空间】 6、查看用户所在表空间的配额 7、删除用户 8、为用户增加删除权限 9、对象权限 10、建用户注意

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 232 7.5.4 修改和删除索引 233 7.6 约束 234 7.6.1 约束类型 234 7.6.2 定义约束 236 ...

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎样创建临时表 6 [Q]怎么样在PL/SQL中执行DDL语句 6 [Q]怎么样获取IP地址 7 [Q]怎么样加密存储过程 7 [Q] 7 [Q] 7 [Q]如果存在就更新,不存在就插入可以用一个语句实现吗 8 [Q]怎么实现左联,右联与外联 9 [Q]...

    Oracle DBA 参考手册

    Temporary Tablespace Performance Tuning(临时表空间的调整) 56 10.4. 并发事件处理 56 10.4.1. 并发事件的产生 56 10.4.2. 锁 56 10.4.2.1. 锁的功能 56 10.4.2.2. 锁的类型 57 10.4.2.3. 锁的模式 58 10.4.2.4...

    oracle数据库经典题目

    数据库表空间分为系统表空间和非系统表空间两类,其中非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储数据库的数据字典、PL/SQL程序的源代码和解释代码、数据库对象的定义。撤销...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 232 7.5.4 修改和删除索引 233 7.6 约束 234 7.6.1 约束类型 234 7.6.2 定义约束 236 ...

    Oracle9i的init.ora参数中文说明

    说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交之前更新任何对象读取。这种操作模式提供可重复的读取, 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | ...

Global site tag (gtag.js) - Google Analytics