Oracle专家高级编程 第一章

理解Oracle的体系结构#

不要在MTS下运行长事物#

不要在多线程服务器上运行45秒以上的事务,若一个进程阻塞可能导致长时间挂起

使用绑定变量#

select * from amp where empno=:empno

绑定变量,它的值在查询执行时提供,查询经过一次编译后,查询方案存储在共享池(库高速缓存),用来检查和复用

  • 提交引用相同对象的完全相同的查询将使用共享池中的编译方案
  • 不仅使用较少资源
  • 减少锁存时间
  • 降低锁存频率
  • 提高了软件性能和可伸缩性

理解并行控制#

并行控制实现数据库和系统文件分离,数据库之间分离

实现封锁#

数据库利用锁定确保指定时间内,一个事务至多修改一处指定的数据

Oracle封锁策略#

  • 只有当修改时,Oracle在行级上锁定数据,不能把锁定上升到块级或表级
  • Oracle绝不会为读取而锁定数据,简单读取不能在数据行上设置锁定
  • 数据的写入器不会阻塞数据读取器
  • 只有当另一个数据写入器已经锁定了某行数据后,才阻塞对他人对改行数据的写入

select for update#

通过 for update 语句加锁,实现多进程下的资源同步

多版本#

  • 一致读查询:在某一时刻查询产生一致结果
  • 非阻塞查询:数据写入器从来不阻塞查询
  • delete命令把数据复制到一个称为回滚段的数据区域保存

oracle所拥有的处理机制,无论何时修改,Oracle都在两个不同地方产生记录

  • 一条记录到redo(重做),存储前滚信息
  • 另一条到undo(撤销),回滚段,用于事务的撤销回复之前的映像

oracle的查询如何保证数据一致#

Oracle只确定数据是否变化,不关心数据是否锁定

posted @   BigBender  阅读(51)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
主题色彩