1. 程式人生 > >Oracle資料庫(十六)——事務和鎖——確保資料安全下

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資料庫備份,expexpdp的區別,impimpdp的區別

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的