IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 事务管理,多版本并发 控制及达梦开发接口 -> 正文阅读

[大数据]事务管理,多版本并发 控制及达梦开发接口

1、 熟练掌握事务管理命令的使用。
–SQL 语句。 在 DISQL 中,用户也可以通过执行如下语句来设置当前会话为自动提交模式:

SET AUTOCOMMIT ON;

–使用 ROLLBACK TO SAVEPOINT SAVEPOINT_NAME 命令来回滚到保存点 SAVEPOINT_NAME。
–用户可以根据自己的需要显式的对表对象进行封锁。显式锁定表的语法如下:

LOCK TABLE <table_name> IN <lock_mode> MODE [NOWAIT];

–用户可以通过执行如下语句查看锁信息:

SELECT * FROM V$LOCK;

–用户可以在事务开始时使用以下语句设定事务为读提交隔离级:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 

–用户可以在事务开始时使用以下语句设定事务为串行化隔离级:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

–用户可以在事务开始时使用以下语句,设定事务为读未提交隔离级:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 

–用户可以在事务开始时使用以下语句,设定事务为只读事务:

SET TRANSACTION READ ONLY;

2、 掌握数据库锁与阻塞。
事务锁定
DM 数据库支持多用户并发访问、修改数据,有可能出现多个事务同时访问、修改相同 数据的情况。若对并发操作不加控制,就可能会访问到不正确的数据,破坏数据的一致性和 正确性。
封锁机制是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据库对象进 行操作前,需要先对其封锁。封锁后事务就对该数据库对象有了一定的控制,在该事务释放 锁之前,其他的事务不能对此数据库对象进行相应操作。
锁模式
锁模式指定并发用户如何访问锁定资源。DM 数据库使用四种不同的锁模式:共享锁、 排他锁、意向共享锁和意向排他锁。

  1. 共享锁
    共享锁(Share Lock,简称 S 锁)用于读操作,防止其他事务修改正在访问的对象。 这种封锁模式允许多个事务同时并发读取相同的资源,但是不允许任何事务修改这个资源。
  2. 排他锁
    排他锁(Exclusive Lock,简称 X 锁)用于写操作,以独占的方式访问对象,不允 许任何其他事务访问被封锁对象;防止多个事务同时修改相同的数据,避免引发数据错误; 防止访问一个正在被修改的对象,避免引发数据不一致。一般在修改对象定义时使用。
  3. 意向锁
    意向锁(Intent Lock)用于读取或修改被访问对象数据时使用,多个事务可以同时 对相同对象上意向锁,DM 支持两种意向锁:
    ? 1) 意向共享锁(Intent Share Lock,简称 IS 锁):一般在只读访问对象时使用;
    ? 2) 意向排他锁(Intent Exclusive Lock,简称 IX 锁):一般在修改对象数据时 使用。

四种锁模式的相容矩阵如下表所示,其中―Y‖表示相容;―N‖表示不相容。如表中第二 行第二列为―Y‖,表示如果某个事务已经加了 IS 锁时,其他事务还可以继续添加 IS 锁, 第二行第五列为―N‖,表示如果某个事务已经加了 IS 锁时,其他事务不能添加 X 锁。

锁粒度

按照封锁对象的不同,锁可以分为 TID 锁和对象锁。

  1. TID 锁
    TID 锁以事务号为封锁对象,为每个活动事务生成一把 TID 锁,代替了其他数据库行 锁的功能,防止多个事务同时修改同一行记录。DM 实现的是行级多版本,每一行记录隐含 一个 TID 字段,用于事务可见性判断。
    执行 INSERT、DELETE、UPDATE 操作时,设置事务号到 TID 字段。这相当于隐式地对记录上了一把 TID 锁,INSERT、DELETE、UPDATE 操作不再需要额外的行锁,避免了大量行锁对系统资源的消耗。只有多个事务同时修改同一行记录时,才会产生新的 TID 锁。 例如,当事务 T1(事务号为 TID1)试图修改某行数据,而该行数据正在被另一个事务 T2 (事务号为 TID2)修改,此时事务 T1 会生成一个新的 TID 锁,其锁对象为事务号 TID2, 而非事务 T2。
    同时多版本写不阻塞读的特性,SELECT 操作已经消除了行锁,因此 DM 中不再有行锁的概念。
  2. 对象锁
    对象锁是 DM 新引入的一种锁,通过统一的对象 ID 进行封锁,将对数据字典的封锁和表锁合并为对象锁,以达到减少封锁冲突、提升系统并发性能的目的。我们先看一下通常数 据字典锁和表锁各自应承担的功能:
    ?1) 数据字典锁:用来保护数据字典对象的并发访问,解决 DDL 并发和 DDL/DML 并发 问题,防止多个事务同时修改同一个对象的字典定义,确保对同一个对象的 DDL 操作是串行执行的。并防止一个事务在修改字典定义的同时,另外一个事务修改对 应表的数据。
    ?2) 表锁:表锁用来保护表数据的完整性,防止多个事务同时采用批量方式插入、更新一张表,防止向正在使用 FAST LOADER 工具装载数据的表中插入数据等,保证 这些优化后数据操作的正确性。此外,表锁还有一个作用,避免对存在未提交修改 的表执行 ALTER TABLE、TRUNCATE TABLE 操作。
    为了实现与数据字典锁和表锁相同的封锁效果,从逻辑上将对象锁的封锁动作分为四 类:
    ?a) 独占访问(EXCLUSIVE ACCESS),不允许其他事务修改对象,不允许其他 事务访问对象,使用 X 方式封锁
    ?b) 独占修改(EXCLUSIVE MODIFY),不允许其他事务修改对象,允许其他事 务共享访问对象,使用 S + IX 方式封锁
    ?c) 共享修改(SHARE MODIFY),允许其他事务共享修改对象,允许其他事务共 享访问对象,使用 IX 方式封锁
    ?d) 共享访问(SHARE ACCESS),允许其他事务共享修改对象,允许其他事务共 享访问对象,使用 IS 方式封锁
  3. 显式锁定表
    用户可以根据自己的需要显式的对表对象进行封锁。显式锁定表的语法如下:
    LOCK TABLE IN MODE [NOWAIT];
    lock_mode 是锁定的模式,可以选择的模式有 INTENT SHARE(意向共享)、INTENT EXCLUSIVE(意向排他)、SHARE(共享)和 EXCLUSIVE(排他),其含义分别如下:
    ?1) 意向共享:不允许其他事务独占修改该表。意向共享锁定后,不同事务可以同时增、 删、改、查该表的数据,也支持在该表上创建索引,但不支持修改该表的定义;
    ?2) 意向排他:不允许其他事务独占访问和独占修改该表。被意向排他后,不同事务可 以同时增、删、改、查该表的数据,不支持在该表上创建索引,也不支持修改该表 定义;
    ? 3)共享:只允许其他事务共享访问该表,仅允许其他事务查询表中的数据,但不允许 增、删、改该表的数据;
    ?4) 排他:以独占访问方式锁定整个表,不允许其他事务访问该表,是封锁力度最大的 一种封锁方式。 当使用 NOWAIT 时,若不能立即上锁成功则立刻返回报错信息,不再等待。
    为了方便用户查看当前系统中锁的状态,DM 数据库专门提供了一个 V$LOCK 动态视图。 通过该视图,用户可以查看到系统当前所有锁的详细信息,如锁的内存地址、所属事务 ID、 锁类型、锁模式等。用户可以通过执行如下语句查看锁信息: SELECT * FROM V$LOCK; 其结果看起来和下面类似:

其中 ADDR 列表示锁的内存地址;TRX_ID 列表示锁所属的事务 ID;LTYPE 列表示锁 的类型,可能是 OBJECT(对象锁)或者 TID(TID 锁);LMODE 表示锁的模式,可能的取值有 S(共享锁)、X(排他锁)、IS(意向共享锁)、IX(意向排他锁);BLOCKED 列表示 锁是否处于上锁等待状态,0 表示已上锁成功,1 表示处于上锁等待状态;TABLE_ID 列对 于对象锁,表示表对象或字典对象的 ID,对于 TID 锁,表示封锁记录对应的表 ID;ROW_IDX 列为 TID 锁封锁记录的行信息;TID 列为 TID 锁对象事务 ID。

  1. 根据锁报错,查找问题语句。
    如果存在长时间没有返回结果得语句,首先通过 V$SESSIONS 确认语句处于活动状态,语句如下:
SELECT * FROM v$sessions WHERE state='ACTIVE'AND dbms_lob.substr(sf_get_session_sql(sess_id))
 LIKE '%语句片段%'

明确事务等待导致语句没有正常执行结束,语句如下:
SELECT * FROM v$trxwait WHERE id = 上述语句得到结果得 TRX_ID
V$TRXWAIT 查询得到结果的 WAIT_FOR_ID 字段标记的事务即为当前语句正在等待的事务。
我们通过查询 SELECT * FROM v$sessions WHERE trx_id = 查询到的 WAIT_FOR_ID,可以得到当前事务所在等待的会话的一些信息,一般来说,都是因为某些会话或者客户端忘记进行提交或者回滚操作,后续就一直空闲了,导致其他的事务由于跟该事务存在一些事务上的依赖关系发生等待,针对这种情况,我们需要在确认安全的情况针对这个阻塞源头会话进行操作,关闭客户端 /CLOSE 会话/发送提交或者回滚命令等。
另外一种等待不会通过 V$TRXWAIT 查询得到结果,比如某些表发生 DDL 操作过程中,其他的会话尝试对该表进行查询,由于字典对象发生变化,所以发生字典对象的等待,这种阻塞可以通过查询 SELECT * FROM v$lock WHERE blocked = 1 来进行确认,查询结果中可以对相关锁对象的持有事务来查询 V$SESSIONS,来确认阻塞来源。

3、 了解 JDBC 接口编程、ODBC 接口编程等。
JDBC (Java Database Connectivity) 是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口 (API)。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。
DM JDBC 数据库驱动程序是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问,JDBC 驱动程序的主要功能包括:
建立与 DM 数据库的连接。
转接发送 SQL 语句到数据库。
处理并返回语句执行结果。

ODBC 提供访问不同类型的数据库的途径。结构化查询语言 SQL 是一种用来访问数据库的语言。通过使用 ODBC,应用程序能够使用相同的源代码和各种各样的数据库交互。这使得开发者不需要以特殊的数据库管理系统 DBMS 为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。
DM ODBC 3.0 遵照 Microsoft ODBC 3.0 规范设计与开发,实现了 ODBC 应用程序与 DM 数据库的互连接口。用户可以直接调 DM ODBC 3.0 接口函数访问 DM,也可以使用可视化编程工具如 C++ Builder、PowerBuilder 等利用 DM ODBC 3.0 访问 DM 数据库。

https://eco.dameng.com

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:30:00  更:2022-07-17 16:31:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:50:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码