Oracle資料庫(十六)——事務和鎖——確保資料安全下
什麼是鎖
資料庫是一個龐大的多使用者資料管理系統,由於在多使用者系統中,同一時刻多個使用者同時操作某相同資源的情況時有發生,而在邏輯上這些使用者想同時操作資源是不可能的,而資料庫利用鎖消除了多使用者操作同一資源可能產生的隱患
鎖出現在資料共享的環境中,它是一種機制,在訪問相同資源時,可以防止事務之間破壞性互動。
鎖的分類,Oracle分為兩種模式的鎖
- 排他鎖(X鎖),也叫寫鎖,防止資源共享,用於資料的修改,加入有事務對資料A加上該鎖,那其他事務不能對A加任何鎖,所以此時只允許T對該資料進行讀取和修改,直到事務完成釋放鎖為止
- 共享鎖(S鎖),也叫讀鎖,這種模式下資料只能讀取,不能修改,如果事務對資料A加了該鎖,那麼其他事務不能對其加上排他鎖,只能加共享鎖。加了該鎖的資料可以被併發的讀取。
鎖的型別
- DML鎖:該型別的鎖被稱為資料鎖,用於保護資料
- 行級鎖(TX) 也可以稱為事務鎖。當修改表中某行記錄時,需要對將要修改的記錄加上行級鎖,屬於排他鎖
- 表級鎖(TM)主要作用是防止在修改表的資料時,表的結構發生變化。會話S在修改表A的資料時它會得到表A的TM鎖,而此時將不允許其他會話對該表進行變更或刪除操作
- DDL鎖:可以保護模式中物件的結構
- 內部閂鎖: 保護資料庫的內部結構,完全自動呼叫
在執行DML操作時,資料庫會先申請資料物件上的共享鎖,防止其他的會話對該物件執行DDL操作,一旦申請成功,會對將要修改的記錄申請排他鎖,如果此時其他會話正在修改該記錄,那麼等待期事務結束後再為修改的記錄加上排他鎖
表級鎖報含如下幾種模式:
- ROW SHARE 行級共享鎖(RS)。該模式下不允許其他的並行會話對同一張表使用排他鎖,但允許其利用DML語句或lock命令所得同一張表中的其他記錄。select … from for update 語句就是給記錄加上了RS鎖
- ROW EXCLUSIVE 行級排他鎖(RX)。該模式允許並行會話對同一張表的其他資料進行修改,但不允許並行會話對同一張表使用排他鎖
- SHARE,共享鎖(s),不允許會話更新表,但允許對錶新增RS鎖
- SHARE ROW EXCLUSIVE,共享行級排他鎖(SRX).該模式下,不能對同一張表進行DML操作,也不能新增S鎖
EXCLUSIVE,排他鎖(X),該模式下,不能對錶進行DML和DDL操作,該表只能讀
RS | S | RX | SRX | X |
---|---|---|---|---|
RS | y | y | y | y |
S | y | y | x | x |
RX | y | x | y | y |
SRX | y | x | x | x |
X | x | x | x | x |
--主動新增TM鎖
LOCK TABLE [SCHEMA.] TABLE IN
[EXCLUSIVE]
[SHARE]
[ROW EXCLUSIVE]
[SHARE ROW EXCLUSIVE]
[ROW SHARE* | SHARE UPDATE*]
MODE [NOWAIT]
--r如果要釋放他們,只需要使用rowback命令
鎖等待和死鎖
在某些情況下有域佔用的資源不能及時釋放,而造成鎖等待,也可以叫鎖衝突,鎖等待會嚴重影響資料庫效能和日常工作。
死鎖和等待不同,它是鎖等待的一個特例,通常發生在空格或多個會話之間。假設一個會話想修改兩個資源物件,修改這個兩個物件在一個事務當中。當它修改第一個物件時需要對其鎖定,然後等待第二個物件,這時如果另外一個會話也需要修改這兩個資源物件,並且已經獲得並鎖定了第二個物件,那麼就會出現死鎖,因為當前會話鎖定了第一個物件等待第二個物件,另一個相反,兩個會話都不能得到向要的物件,就會出現死鎖。
此時oracle自動做出處理,並重新回到鎖等待的情況。出現鎖等待的情況時應儘快找出錯誤並對其處理。主要原因有:
- 使用者沒有良好的程式設計習慣,偶爾忘記提交事務,導致長時間佔用資源
- 操作的記錄過多,而且操作過程沒有很好的對其分組。前面介紹過,對於資料量很大的操作,可以將其分成幾組提交事務。這樣可以避免長時間地佔用資源
- 邏輯錯誤,兩個會話都想得到已佔有的資源
相關推薦
Oracle資料庫(十六)——事務和鎖——確保資料安全下
什麼是鎖 資料庫是一個龐大的多使用者資料管理系統,由於在多使用者系統中,同一時刻多個使用者同時操作某相同資源的情況時有發生,而在邏輯上這些使用者想同時操作資源是不可能的,而資料庫利用鎖消除了多使用者操作同一資源可能產生的隱患 鎖出現在資料共享的環境中,它是一
Oracle資料庫(十五)——事務和鎖——確保資料安全上
事務和鎖是兩個聯絡非常緊密的概念,它們保證了資料庫的一致性。由於資料庫是一個可以由多個使用者共享的資源,因此當多個使用者併發的存取資料時,就要保證資料的準確性。事務和鎖就完成了這項功能。 什麼是事務 事務在資料庫中主要用於保證資料的一致性,防止出現錯誤資
第十六章——處理鎖、阻塞和死鎖(2)——偵測阻塞和阻塞查詢
前言: 如果一個事務正在等待一些給其他事務鎖定的資源。這個事務就被成為“被阻塞的事務”。反過來,引起阻塞的事務,也就是鎖定資源並造成其他事務等待的事務叫做“正在阻塞的事務”。 長時間執行事務會阻塞其他事務和查詢,使他們等待長時間。在繁重的系統中,很多時候我們會遇到阻塞問題,
資料庫事務和鎖機制
前幾日有一個獵頭公司的面試,其中問道我事務隔離這塊的知識點,猛一問真是想不起來啊,頓感羞愧啊,回來專門總結一下這方面的知識來夯實一下之前的知識體系,也提醒廣大園友們進步在於總結啊,好多不用的知識點,有時候有必要溫故知新啊。 簡介 ACID,是指在可靠
資料庫事務和鎖(一)
簡述 關係型資料庫有四個顯著的特徵,即安全性、完整性、併發性和監測性。資料庫的安全性就是要保證資料庫中資料的安全,防止未授權使用者隨意修改資料庫中的資料,確保資料的安全。在大多數資料庫管理系統中,主要是通過許可來保證資料庫的安全性。完整性是資料庫的一個重要特徵,也是保
關於資料庫事務和鎖的必會知識點,你掌握了多少?
> 關於MySQL資料庫的這些核心知識點,你都掌握了嗎? 推薦閱讀: - [這些必會的計算機網路知識點你都掌握了嗎](https://www.cnblogs.com/zydybaby/p/14154148.html) - [關於資料庫索引,必須掌握的知識點](https://www.cnblog
mysql事務和鎖InnoDB
格式 一次 photos 出了 線上 man down efm 常見 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題
觸發器、事務和鎖
分享 刪除 llb blog exists 技術 eat values 繼續 觸發器是與表相關的數據對象,在滿足條件時觸發,可以協助應用在數據庫端保證數據的完整性 觸發器只能創建在永久表上,不能用於臨時表(create temporary table ) create tr
MySQL數據庫高級(七)——事務和鎖
MySQL 事務 鎖MySQL數據庫高級(七)——事務和鎖 一、事務簡介 1、事務簡介 事務(Transaction) 是指作為單個邏輯工作單元執行的一系列操作。 2、事務的特性 A、原子性(Atomicity)表示組成一個事務的多個數據庫操作是一個不可分隔的原子單元,只有所有的操作執行成功,整個事務才提交,
Oracle_高級功能(8) 事務和鎖
ora 驅動 出現 取數據 數據庫事務 並行 產生 錯誤 有效 Oracle數據庫事務1. 事務定義在數據庫中事務是工作的邏輯單元,一個事務是由一個或多個完成一組的相關行為的SQL語句組成,通過事務機制確保這一組SQL語句所作的操作要麽都成功執行,完成整個工作單元操作,要麽
日期型別的資料在Oracle資料庫中的儲存和查詢
使用Oracle資料庫,mybatis的對映檔案中日期型別的資料,如果定義為<result column =“UPDATED_DATE" jdbcType =“DATE” property =“updatedDate”/>,即使在後臺你為日期賦予年月日時分秒,但儲存到資料庫中將只
oracle資料庫查看錶和表字段的語句
1.檢視當前使用者的表 select * from user_tables tt where tt.TABLE_NAME=upper('表名稱'); 2.查看錶對應的欄位 select * from user_tab_columns t3 where t3.T
Oracle資料庫備份,exp和expdp的區別,imp和impdp的區別
oracle資料庫備份 1: 建立dmp匯出目錄 create directory 目錄名 as '目錄路徑' 2: 檢視當前建立的所有dmp匯出目錄 select * from dba_directories 3: 備份 expdp 使用者名
redis之六 事務和watch
redis中文官網:redis事務[中文] redis的事務和watch redis是單執行緒的,所以在redis中所有命令都是原子操作。而當要多條redis命令同時執行而不被打斷時,則需要使用redis的事務了。 redis中的事務是用以下4個命令來實現的: - MULTI
【資料庫視訊】事務、鎖、系統與原資料函式、BEGIN…END
一、事務 管理語句: BEGIN TRANSACTION(開啟) COMMIT TRANSACTION(提交) ROLLBACK TRANSACTION(回滾) SAVE TRANSACTION(儲存)
Oracle 資料庫入門之----------------------過濾和排序
過濾和排序 SQL> --查詢10號部門的員工 SQL> select * 2 from emp 3 where&nb
Oracle資料庫定時任務配置和日誌執行情況查詢
建立定時任務/***************************************************************** * * 移動抵扣券快到期推送提醒 * 首次執行 : 2
oracle資料庫分割槽的備份和恢復
show parameter db_create_file 2 設定表空間地址 alter system set DB_CREATE_FILE_DEST ='/opt/oracle/product/oradata/orcl' 3 建立6個表空間,3個給表分割槽,三給分割槽索引 create tablespac
mysql事務和鎖 SELECT FOR UPDATE
事務:當然有的人用begin /begin work .推薦用START TRANSACTION 是SQL-99標準啟動一個事務。 start transaction #開始一個事務 操作 savepoint sp1 #儲存點名稱 操作 ROLLBACK ROLLBACK To sp1
Redis事務和鎖的應用詳解
一、Redis事務的應用 無論是大小專案還是各種系統,相信事務是不容忽視的,下面,我們對redis的事務展開討論。 如果你比較熟悉mysql的事務,redis的事務那就很簡單了。我們對redis的事務和mysql的事務進行下比較就能更清楚的瞭解到redis的