1、找到并進入運行窗口:(可以用windows+r快捷鍵哦)輸入sqlplus命令:如圖
成都創新互聯公司是一家集網站建設,五龍口企業網站建設,五龍口品牌網站建設,網站定制,五龍口網站建設報價,網絡營銷,網絡優化,五龍口網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
2、進入新窗口后使用scott/tiger用戶和密碼進行登錄會發現登錄不成功:如圖
3、這時我們可以使用system用戶進行登錄,應為此用戶的權限排第二,并且密碼我們已經在安裝時輸入了了,所以是可以登錄進入的:如圖
4、system登錄成功之后就可以使用命令給用戶進行解鎖了:如圖
5、最后再用scott/tiger用戶時,你可以神奇的發現此時能連接成功了:如圖
鎖是數據庫用來控制共享資源并發訪問的機制。
例如
用戶A執行了
update tb1 set name='xx' where id=1;
那么在用戶A沒提交前表tb1的id=1的行就是鎖著的,其它用戶想要修改必需等A用戶提交后才能執行修改任務。
當然ORACLE的鎖有很多種,比如行級鎖、表級鎖等等
下面是一些復制來的希望對你有幫助
鎖是數據庫用來控制共享資源并發訪問的機制。
鎖用于保護正在被修改的數據
直到提交或回滾了事務之后,其他用戶才可以更新數據
鎖定的優點
一致性- 一次只允許一個用戶修改數據
完整性- 為所有用戶提供正確的數據。如果一個用戶進行了修改并保存,所做的修改將反映給所有用戶
鎖的類型
行級鎖
對正在被修改的行進行鎖定。其他用戶可以訪問除被鎖定的行以外的行
行級鎖是一種排他鎖,防止其他事務修改此行
在使用以下語句時,Oracle會自動應用行級鎖:INSERT UPDATE DELETE SELECT …FOR UPDATE SELECT …FOR UPDATE語句允許用戶一次鎖定多條記錄進行更新
使用COMMIT或ROLLBACK語句釋放鎖
SELECT …FOR UPDATE語法:SELECT …FOR UPDATE [OF columns][WAIT n | NOWAIT];
SQL SELECT * FROM order_master WHERE vencode=’V002’
FOR UPDATE OF odate, del_date;
SQL UPDATE order_master SET del_date=’28-8月-05’
WHERE vencode=’V002’;
SQL COMMIT;
SQL SELECT * FROM order_master WHERE vencode=’V002’
FOR UPDATE WAIT 5;
SQL SELECT * FROM order_master WHERE vencode=’V002’
FOR UPDATE NOWAIT;
使用命令顯示地鎖定表,應用表級鎖的語法是:
LOCK TABLE table_name IN mode MODE;
行共享(ROW SHARE) – 禁止排他鎖定表
行排他(ROW EXCLUSIVE) – 禁止使用排他鎖和共享鎖
共享鎖(SHARE)
鎖定表,僅允許其他用戶查詢表中的行
禁止其他用戶插入、更新和刪除行
多個用戶可以同時在同一個表上應用此鎖
共享行排他(SHARE ROW EXCLUSIVE) – 比共享鎖更多的限制,禁止使用共享鎖及更高的鎖
排他(EXCLUSIVE) – 限制最強的表鎖,僅允許其他用戶查詢該表的行。禁止修改和鎖定表
表級鎖
占用模式 其他用戶
ROW SHARE ROW EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE SELECT..FOR UPDATE INSERT DELETE UPDATE
ROW SHARE √ √ √ √ × √ √
ROW EXCLUSIVE √ √ × × × √ √
SHARE √ × √ × × √ ×
SHARE ROW EXCLUSIVE √ × × × × √ ×
EXCLUSIVE × × × × × × ×
死鎖
當兩個事務相互等待對方釋放資源時,就會形成死鎖
Oracle會自動檢測死鎖,并通過結束其中的一個事務來解決死鎖
右邊是一個死鎖的例子
在DBA的日常工作中,經常遇到為Oracle用戶解鎖的操作;這篇文章給出在命令行下進行Oracle用戶解鎖的操作方法,通過幾條簡單的解鎖語句就能完成此項工作。下面是具體的過程:
默認的scott用戶是被鎖定的,先解鎖就能登陸上了。 使用下面的語句解鎖scott:
alter user scott account unlock;
解鎖之后可能會要求你該密碼:
alter user scott identified by tiger;
再登陸:
sqlplus scott/tiger
就能登陸了
Oracle鎖定和解鎖用戶的命令
SQL conn /as sysdba
已連接。
//scott 用戶在沒有設定tieger默認密碼時,登陸不上
鎖定用戶的方法:
SQL alter user test account lock;
用戶已更改。
-------test用戶登陸數據庫,失敗了。
C:\sqlplus test/test
ERROR:
ORA-28000: the account is locked
Oracle用戶解鎖的方法:
SQL conn /as sysdba
SQL alter user test account unlock;
用戶已更改。這樣就完成了Oracle的用戶解鎖操作。
ORACLE鎖具體分為以下幾類:
1.按用戶與系統劃分,可以分為自動鎖與顯示鎖
自動鎖:當進行一項數據庫操作時,缺省情況下,系統自動為此數據庫操作獲得所有有必要的
顯示鎖:某些情況下,需要用戶顯示的鎖定數據庫操作要用到的數據,才能使數據庫操作執行得更好,顯示鎖是用戶為數據庫對象設定的。
2.按鎖級別劃分,可分為共享鎖與排它鎖
共享鎖:共享鎖使一個事務對特定數據庫資源進行共享訪問——另一事務也可對此資源進行訪問或獲得相同共享鎖。共享鎖為事務提供高并發性,但如拙劣的事務設計+共享鎖容易造成死鎖或數據更新丟失。
排它鎖:事務設置排它鎖后,該事務單獨獲得此資源,另一事務不能在此事務提交之前獲得相同對象的共享鎖或排它鎖。
3.按操作劃分,可分為DML鎖、DDL鎖
+DML鎖又可以分為,行鎖、表鎖、死鎖
-行鎖:當事務執行數據庫插入、更新、刪除操作時,該事務自動獲得操作 表中操作行的排它鎖。
-表級鎖:當事務獲得行鎖后,此事務也將自動獲得該行的表鎖(共享鎖),以防止其它事務進行DDL語句影響記錄行的更新。事務也可以在進行 過程中獲得共享鎖或排它鎖,只有當事務顯示使用LOCK TABLE語 句顯示的定義一個排它鎖時,事務才會獲得表上的排它鎖,也可使用
LOCK TABLE顯示的定義一個表級的共享鎖(LOCK TABLE具體用法請參 考相關文檔)。
-死鎖:當兩個事務需要一組有沖突的鎖,而不能將事務繼續下去的話,就 出現死鎖。
如事務1在表A行記錄#3中有一排它鎖,并等待事務2在表A中記錄#4 中排它鎖的釋放,而事務2在表A記錄行#4中有一排它鎖,并等待事務 1在表A中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造 成了死鎖。死鎖一般是因拙劣的事務設計而產生。
死鎖只能使用SQL下:alter system kill session 'sid,serial#';
或者使用相關操作系統kill進程的命令,如UNIX下kill -9 sid,或者 使用其它工具殺掉死鎖進程。
+DDL鎖又可以分為:排它DDL鎖、共享DDL鎖、分析鎖
-排它DDL鎖:創建、修改、刪除一個數據庫對象的DDL語句獲得操作對象的 排它鎖。
如使用alter table語句時,為了維護數據的完成性、一致性、
合法性,該事務獲得一排它DDL鎖。
-共享DDL鎖:需在數據庫對象之間建立相互依賴關系的DDL語句通常需共享
獲得DDL鎖。
如創建一個包,該包中的過程與函數引用了不同的數據庫表,
當編譯此包時,該事務就獲得了引用表的共享DDL鎖。
-分析鎖:ORACLE使用共享池存儲分析與優化過的SQL語句及PL/SQL程序,使
運行相同語句的應用速度更快。一個在共享池中緩存的對象獲得
它所引用數據庫對象的分析鎖。分析鎖是一種獨特的DDL鎖類型,
ORACLE使用它追蹤共享池對象及它所引用數據庫對象之間的依賴 關系。當一個事務修改或刪除了共享池持有分析鎖的數據庫對象
時,ORACLE使共享池中的對象作廢,下次在引用這條SQL/PLSQL語 句時,ORACLE重新分析編譯此語句。
4.內部閂鎖
內部閂鎖:這是ORACLE中的一種特殊鎖,用于順序訪問內部系統結構。
當事務需向緩沖區寫入信息時,為了使用此塊內存區域, ORACLE首先必須取得這塊內存區域的閂鎖,才能向此塊內存寫入
信息。
1、在做Oracle監聽程序測試時,發現帳戶已經被鎖定。
2、在數據庫安裝電腦上,點擊開始打開運行窗口。
3、在運行窗口輸入CMD,調出命令提示符界面。
3、在命令提示符下面,用管理員身份登入到數據庫sqlplus / as sysdba。
4、輸入解鎖命令alter user Scott account unlock后回車。
5、看見用戶已更改的字樣,表示命令已成功執行。
6、再切換到監聽程序驗證,原來的ora-28000帳戶被鎖定的提示已經不存在了。用戶解鎖成功。
這個連續5次不好定義,假設一個人今天試驗了4次,明天又試驗了一次,那么也可以說是連續5次(雖然有點抬杠,不過這個也算是連續5次),這種怎么算?
以下純屬猜想,沒有試驗過只是把想到的可能說一說
我能想到的是oracle的一個讓人很頭痛的功能(因為開了這個功能的話,真的比較恐怖)——審計。這個功能會記錄登錄失敗的信息在相關的表中,比如aud$,如果能建立觸發器對該表進行統計,那么應該能實現你說的連續5次,但是這個就好像和profile沒什么關系了。可能需要手動鎖定用戶了,然后再開啟一個定時任務,一旦執行了所應用戶的操作(基本上又是一個c觸發器),那么5分鐘后執行解鎖用戶,不過這個環節也太多了,而且oracle的兩個計劃任務有時也不怎么靠譜,萬一有一個環節卡死了,那么整套流程就進行不下去了。感覺好像更麻煩的樣子。
如果不在oracle的層面可能就會好解決一些,如果外面套了一層java的殼,那么簡單的做一個循環就好了,只要在多長時間內(比如24小時)循環到5,或者連續循環到5,那么就鎖定斷開該登錄(拒絕登錄)5分鐘,根本不用鎖定用戶(畢竟別人還要用)。(個人不會java,以上純屬猜測)
我記得還有一種方式可以將登錄失敗的信息記錄到alert文件,但是就算能統計出來連續5次,然后呢,這個5怎么傳入數據庫,傳入后怎么操作,我想了半天也沒想明白。畢竟frofile本身,沒有“連續密碼錯誤”的這個參數。