首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

并行修改对象后,停止Oracle读取/修改对象

并行修改对象后,停止Oracle读取/修改对象是通过使用锁来实现的。在Oracle数据库中,可以使用两种类型的锁来实现并行修改对象后停止读取/修改对象的操作:排他锁和共享锁。

排他锁(Exclusive Lock)是一种独占锁,当一个事务持有排他锁时,其他事务无法获取该对象的任何类型的锁,包括共享锁和排他锁。只有当持有排他锁的事务释放锁后,其他事务才能获取锁。

共享锁(Shared Lock)是一种共享锁,允许多个事务同时获取同一个对象的共享锁,但不允许获取排他锁。当一个事务持有共享锁时,其他事务可以同时获取该对象的共享锁,但无法获取排他锁。只有当所有持有共享锁的事务释放锁后,其他事务才能获取排他锁。

在并行修改对象后停止读取/修改对象的操作中,可以使用排他锁来实现。当一个事务开始修改对象时,可以在该对象上加上排他锁,这样其他事务就无法读取或修改该对象。当该事务完成修改后,释放排他锁,其他事务才能再次读取或修改该对象。

优势:

  • 确保并行修改对象的一致性:通过使用排他锁来停止其他事务的读取/修改操作,可以确保在一个事务对对象进行修改时,其他事务无法读取到被修改的对象。这样可以避免并行修改导致的数据不一致性问题。
  • 提高并发性能:通过并行修改对象后停止读取/修改对象的操作,可以提高数据库的并发性能。当一个事务在修改对象时,其他事务无法读取/修改该对象,避免了数据的竞争和冲突,提高了数据库的并发处理能力。

应用场景:

  • 在某些业务场景下,需要确保对象的一致性。例如,在金融交易中,当一个账户正在进行转账操作时,需要停止其他事务对该账户的读取/修改操作,以确保账户余额的正确性。
  • 在某些数据敏感的场景下,需要保护对象的安全性。例如,对于一些机密数据,当一个事务在对其进行修改时,需要停止其他事务对该数据的读取操作,以确保数据的安全性。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库 MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_postgresql
  • 腾讯云分布式数据库 TDSQL:https://cloud.tencent.com/product/tdsql

注意:以上推荐的产品仅为示例,并非实际的答案,具体的产品选择应根据实际需求进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 数据库的 IO 到底有多慢?

    有过多年应用开发经验的同学大都会体验过数据库 IO 比较慢的情况,但到底会慢到什么程度,特别是和其它读写数据的手段相比的差距,可能很多人还没有感性认识。 Java 是普遍采用的应用开发技术,我们来实际测试一下,Java 程序从 Oracle 和 MySQL 这两种典型数据库中读数的性能,并和读文本文件对比。 用国际标准 TPCH 的工具生成数据表,选用其中的 customer 表,3000 万行,8 个字段。生成的原始文本文件有 4.9G。将这些数据导入到 Oracle 和 MySQL 中。 硬件环境是单台 2CPU 共 16 核的服务器,文本文件和数据库都在 SSD 硬盘上。所有测试都在本机完成,没有实质上的网络传输时间。

    02

    表空间的状态(二) - read/write

    1. 只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。Oracle不会更新只读表空间爱你的文件,因此这部分文件可以存储于只读介质中,例如CD-ROM或WORM drives。 2. 只读表空间并不是为了满足归档的要求。只读表空间不能修改。如果需要修改只读表空间中的记录,则需要先将表空间置为read/write。更新表空间后,可以重置为只读。 3. 由于只读表空间不能修改,所以只要没有置为read/write,就不需要重复地进行备份。而且,如果需要恢复数据库时,也不需要恢复只读表空间,原因就是他们未曾修改过。 4. 能从只读表空间中删除对象,例如表或索引,但不能创建或修改对象。可以执行修改数据字典中文件描述的语句,例如ALTER TABLE ... ADD或ALTER TABLE ... MODIFY,但不能添加任何新的描述信息,除非表空间置为read/write。 5. 只读表空间可以导出导入到其他数据库。既然只读表空间不能修改,他们就能存储于CD-ROM或WORM(一次写-多次读)这些设施中。 6. 所有表空间初始创建都是read/write。使用READ ONLY子句可以设置表空间为只读。前提是必须具有ALTER TABLESPACE或MANAGE TABLESPACE的系统权限。 使用ALTER TABLESPACE ... READ ONLY前,需要满足以下条件: > 表空间处于online状态。这是为了确保不会有UNDO信息需要应用到表空间。注:如果处于offline,则会将UNDO信息存储于SYSTEM表空间,待恢复online时应用这些UNDO信息。 > 不能修改活动的UNDO表空间或SYSTEM表空间。 > 表空间不能处于当前正在进行的online备份中,因为备份结束时会更新表空间所有数据文件的头部信息。 > 为了让从只读表空间读取数据得到更好的性能,可以在置为read-only之前执行一次访问表空间的表中所有数据块的查询。一个像SELECT COUNT(*)这样简单的查询,就可以确保在表空间的数据块在接下来的访问中获得最佳的效率。因为这种做法就不需要数据库检查最近经常修改数据块的交易状态。 7. 可以在数据库正处理交易的时候执行ALTER TABLESPACE ... READ ONLY语句。执行语句后,表空间就处于交易只读状态。不会允许任何交易(DML操作)应用于表空间。如果尝试进行交易操作,那么此操作会被终止和回滚。然而,那些已经做了变更并不再进行进一步修改的交易,就允许执行commit或roll back操作。 如果ALTER TABLESPACE ... READ ONLY语句执行前,一个交易已经执行了,但是回滚到一个保存点,回滚了他对表空间的变更,那么ALTER TABLESPACE ... READ ONLY语句不会等待这个活动的交易。 8. 交易级只读状态仅仅当初始化参数COMPATIBLE是8.1.0或以上值时才能使用。如果参数值小于8.1.0,并且存在活动的交易,ALTER TABLESPACE ... READ ONLY语句会失败。 9. 如果ATLER TABLESPACE语句执行时间太长了,那么就需要找到阻止只读状态生效的那些交易。如下语句可以找出执行ALTER TABLESPACE ... RAED ONLY语句的交易入口和session地址(saddr): SELECT SQL_TEXT, SADDR FROM V$SQLAREA,V$SESSION WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%'; SQL_TEXT                                  SADDR ---------------------------------------- -------- alter tablespace tbs1 read only           80034AF0 每个活动交易的开始SCN会存储于V$TRANSACTION视图中。起始SCN越小,说明这步操作就越早。潜在地这条语句越可能阻止接下来只读状态的变更。 SELECT SES_ADDR, START_SCNB FROM V$TRANSACTION ORDER BY START_SCNB; SES_ADDR START_SCNB -------- ---------- 800352A0 3621 --> waiting on this txn 80035A50 3623 --> waiting on this txn 80034AF0 3628 --> this is the ALTE

    02
    领券