<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-13  評論-28  文章-63  trackbacks-0
      2008年8月7日

    在Linux系統中我一般采用編譯源碼的方式來安裝Apache,有兩種方法可以讓Apache在系統啟動時自動啟動。

    1. 在/etc/rc.d/rc.local中增加啟動apache的命令,例如:/usr/local/httpd/bin/apachectl start

    2. 將apache注冊為系統服務

    首先將apachectl命令拷貝至/etc/rc.d/init.d目錄下,改名為httpd

    使用編輯器打開httpd文件,并在第一行#!/bin/sh下增加兩行文字如下

    # chkconfig: 35 70 30
    # description: Apache

    接著注冊該服務

    chkconfig --add httpd

    一切OK了,啟動服務

    service httpd start

    其中所增加的第二行中三個數字第一個表示在運行級別3和5下啟動apache,第二、三是關于啟動和停止的優先級配置,無關緊要。

    posted @ 2008-08-07 16:51 七匹狼 閱讀(298) | 評論 (0)編輯 收藏
      2006年11月2日
    70EW-TH17Q1-PM-C01-S1W2QD-MEM-NUYY
    posted @ 2006-11-02 13:51 七匹狼 閱讀(582) | 評論 (0)編輯 收藏
      2006年9月7日
    當使用9205以前版本的exp程序去9205及以上的數據庫中去導出帶LOB字段的表時, 會遇到一個錯誤, 錯誤信息為"EXP-00003 : 沒找到段的存貯定義 .....", 事實上這是一個Oracle的Bug, 可以通過監時地更改視圖"exu9tne"的定義來臨時解決問題, 如下所示:

    ? ? 在導出前, 連接到SYS用戶, 運行以下SQL:

    CREATE OR REPLACE VIEW exu9tne (
    tsno, fileno, blockno, length) AS
    SELECT ts#, segfile#, segblock#, length
    FROM sys.uet$
    WHERE ext# = 1
    UNION ALL
    SELECT * FROM SYS.EXU9TNEB
    /

    ? ? 導出完成后, 運行以下命令來還原視圖的定義, 下面貼的是Oracle 9用的, 10g的還是請訪問Metalink來確定, 或者在運行前一個命令之前, 從USER_VIEWS中將原視圖的定義查出來, 這樣做也是DBA一個很好的習慣.

    CREATE OR REPLACE VIEW exu9tne (
    tsno, fileno, blockno, length) AS
    SELECT ts#, segfile#, segblock#, length
    FROM sys.uet$
    WHERE ext# = 1
    /
    posted @ 2006-09-07 11:35 七匹狼 閱讀(600) | 評論 (0)編輯 收藏
      2006年9月3日
    ?????????1) 創建用戶 :

       create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;

       2) 用戶授權

       grant connect,resource,dba to business;???
    ?????
    ???????? 3) 提交

       commit;

    創建角色:
    ???1:CREATE ROLE role_name IDENTIFIED BY password
    ?????????CREATE ROLE role_name IDENTIFIED EXTERNALLY
    ?????????CREATE ROLE role_name IDENTIFIED GLOBALLY

    ?????????缺省情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY 子句建立,那么角色不會自動響應,必須用SET ROLE激活。

    SET ROLE role_name IDENTIFIED BY password

    EXTERNALLY和GLOBALLY類型的角色由操作系統和ORACLE Service server驗證。通常用戶需要權限修改應用程序中使用的表單中的數據,但是只有在應用程序運行時而不是在使用ad hoc工具時,這種上下文敏感安全可以通過有PASSWORD的角色來實現。當用戶在應用程序內部連結數據庫時,代碼將執行SET ROLE命令,通過安全驗證。所以用戶不需要知道角色的password,也不需要自己輸入SET ROLE命令。

    對象權限

      對象權限就是指在表、視圖、序列、過程、函數或包等對象上執行特殊動作的權利。有九種不同類型的權限可以授予給用戶或角色。如下表:
    權限ALTERDELETEEXECUTEINDEXINSERTREAD REFERENCESELECT UPDATE
    Directoryno no no no no yesnono no
    functionnonoyesno nonononono
    procedureno noyesnonono nonono
    packagenonoyesnononononono
    DB Objectno no yesnono nononono
    Libary nonoyes nonono no nono
    Operation no no yesno no no no no no
    Sequenceyes no no no no no no no no
    Table yes yes noyesyes no yes yes yes
    Typeno no yes no no no no no no
    View no yes no no yes no no yes yes
     對象由不止一個權限,特殊權限ALL可以被授予或撤銷。如TABLE的ALL權限就包括:

    系統權限

      系統權限需要授予者有進行系統級活動的能力,如連接數據庫,更改用戶會話、建立表或建立用戶等等。你可以在數據字典視圖SYSTEM_PRIVILEGE_MAP上獲得完整的系統權限。對象權限和系統權限都通過GRANT語句授予用戶或角色。需要注意的是在授予對象權限時語句應該是WITH GRANT OPTION子句,但在授予系統權象時語句是WITH ADMIN OPTION,所以在你試圖授予系統權限時,使用語句WITH GRANT OPTION系統會報告一個錯誤:ONLY ADMIN OPTION can be specified。在考試中要特別注意這個語法和錯誤信息。

    posted @ 2006-09-03 16:33 七匹狼 閱讀(2121) | 評論 (1)編輯 收藏

    一、系統環境:

    (1)、操作系統:Windows 2000 professional,機器內存512M

    (2)、數據庫: Oracle 8i R2 (8.1.6) for 2000 企業版

    (3)、安裝路徑:D:\ORACLE

    二、卸載步驟:

    (1)、開始->設置->控制面板->管理工具->服務

    停止所有Oracle服務。

    (2)、開始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer

    卸裝所有Oracle產品

    (3)、運行regedit,選擇HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del鍵刪除這個入口。

    (4)、運行regedit,選擇HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滾動這個列表,刪除所有Oracle入口

    (5)、從桌面上、STARTUP(啟動)組、程序菜單中,刪除所有有關Oracle的組和圖標

    (6)、重新啟動計算機,重起后才能完全刪除Oracle所在目錄

    (7)、刪除與Oracle有關的文件,選擇Oracle所在的缺省目錄C:\Oracle,刪除這個入口目錄及所有子目錄,

      并從Windows 2000目錄(一般為C:\WINNT)下刪除以下文件

      ORACLE.INI、oradim80.INI

    (8)、WIN.INI文件中若有[ORACLE]的標記段,刪除該段

    注:第8步可有可無

    如果是在unix或linux下那就更方便了,只要刪除$ORACLE_HOME下的所以文件,以及所有數據文件,最后刪除日志文件就可以了

    posted @ 2006-09-03 14:52 七匹狼 閱讀(349) | 評論 (0)編輯 收藏
      2006年9月1日
    本文所涉及到的Oracle_Database_10g運行在操作系統Red Flag Linux DC 4.1下。
    ??? 8月1日至8月19日,CALIS第三期系統管理員培訓班在上海交通大學閔行校區圖書館成功舉行。作為這期培訓班的管理人員之一,筆者旁聽了紅旗Linux 和Oracle Database 10g的全部講課。10g的培訓內容基本涉及到了該數據庫的各個方面,但是在實際部署CALIS產品的時候,除了要了解Red Flag Linux DC 4.1下有方便10g安裝的Oracle Install Navigator(系統命令oranavi),以下三個問題值得注意。一、RESOURCE角色的UNLIMITED TABLESPACE權限問題
    ??? 在10g中,RESOURCE角色包含了CREATE TRIGGER、CREATE INDEXTYPE和CREATE PROCEDURE等常用的系統權限,因此在10g中創建新用戶的時候除了默認的CONNECT角色,一般還要賦予RESOURCE角色。
    ??? 現在,使用Enterprise Manager(EM)或者下面的SQL語句創建一個新用戶:
    ??? CREATE USER "TEST" PROFILE "DEFAULT" IDENTIFIED BY "TESTPASS" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
    ??? GRANT "CONNECT" TO "TEST";
    ??? GRANT "RESOURCE" TO "TEST";
    ??? 下邊,在SQL*PLUS中以該用戶身份登錄:
    ??? [liuxg@localhost liuxg]$ su - oracle
    ??? [oracle@localhost oracle]$ sqlplus /nolog
    ??? SQL> connect test/testpass
    ??? 查詢該用戶所擁有的全部權限:
    ??? SQL> select * from session_privs;
    ??? PRIVILEGE
    ??? --------------------------------------------------------------------------------
    ??? CREATE SESSION
    ??? ALTER SESSION
    ??? UNLIMITED TABLESPACE
    ??? CREATE TABLE
    ??? CREATE CLUSTER
    ??? CREATE SYNONYM
    ??? CREATE VIEW
    ??? CREATE SEQUENCE
    ??? CREATE DATABASE LINK
    ??? CREATE PROCEDURE
    ??? CREATE TRIGGER
    ??? PRIVILEGE
    ??? --------------------------------------------------------------------------------
    ??? CREATE TYPE
    ??? CREATE OPERATOR
    ??? CREATE INDEXTYPE
    ??? 14 rows selected.
    ??? 從結果中可以看到,該用戶擁有UNLIMITED TABLESPACE系統權限。但是如果使用select privilege from role_sys_privs where role='CONNECT'以及select privilege from role_sys_privs where role='RESOURCE'查詢CONNECT和RESOURCE角色卻找不到UNLIMITED TABLESPACE這個系統權限。
    ??? 從Oracle MetaLink得知,UNLIMITED TABLESPACE是為了使10g保持向后兼容性而隱含在RESOURCE角色中的一個系統權限。從安全性的角度來考慮,在創建用戶并且授予RESOURCE角色之后應該回收UNLIMITED TABLESPACE這個系統權限。這里推薦創建一個新角色,比如CALIS_RESOURCE,該角色擁有select privilege from role_sys_privs where role='RESOURCE'查詢語句所列出的全部系統權限,而在創建新用戶的時候則將賦予這個新角色。二、8080端口和2100端口被占用問題
    ??? 很多用戶發現,在10g運行的時候,如果啟動默認端口為8080的Tomcat,不能訪問Tomcat所提供的Web應用程序,通過命令lsof -i:8080會發現該端口已經被10g占用;同樣,如果啟動默認端口為2100的CALIS Z-Server,該服務也不能夠被訪問,再通過lsof -i:2100會發現該端口也是被10g占用。
    ??? 當然可以通過改變Tomcat和CALIS Z-Server默認端口的方式來避免端口沖突。通過調查發現10g中是XML DB在使用8080和2100,而XML DB目前在CALIS各項產品中還未使用到,因此,建議通過關閉XML DB來解決問題。具體可參考如下幾步操作:
    ??? [liuxg@localhost liuxg]$ su - oracle
    ??? [oracle@localhost oracle]$ sqlplus /nolog
    ??? SQL> connect / as sysdba
    ??? SQL> alter system set dispatchers='' scope=both;
    ??? SQL> shutdown immediate
    ??? SQL> startup 三、 Enterprise Manager(EM)的使用問題
    ??? 10g提供了使用瀏覽器以Web方式訪問數據庫的工具Enterprise Manager,EM極大的方便了數據庫管理員對數據庫的管理。與此同時,EM默認使用的協議是HTTP,數據庫用戶密碼以及對數據庫進行的各項操作都是在網絡上明文傳輸,這無疑是極大的安全隱患。針對這個問題,建議使用安全性較高的HTTPS協議使用EM。具體可參考如下幾步操作:
    ??? [liuxg@localhost liuxg]$ su - oracle
    ??? [oracle@localhost oracle]$ emctl stop dbconsole
    ??? [oracle@localhost oracle]$ secure dbconsole
    ??? [oracle@localhost oracle]$ emctl start dbconsole
    ??? 其中為10g中sysman用戶的密碼。需要說明的是,在這之后,用Microsoft Internet Explorer和Red Flag Linux DC 4.1自帶的Mozilla可以正常通過HTTPS協議訪問EM,但是使用Firefox則會出現invalid certificate的提示,無法正常訪問,需要進一步試驗來解決。
    ??? 對于EM的中文界面出現亂碼的情況,解決方法請參考這個網址:
    ??? http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm。由于EM的中文界面有很多翻譯不夠準確的地方,因此最好是設置瀏覽器的默認語言為英文,使用英文操作界面。
    ??? 另外,如果使用DBCA新建立了一個庫并配置了EM,那么訪問該庫的EM的時候端口不再是5500,而是5501。如果再新建立另外的多個庫,則端口號依次增加1,iSQL*PLUS等具有相同的規律
    posted @ 2006-09-01 15:34 七匹狼 閱讀(323) | 評論 (0)編輯 收藏
    1:打包:
    ??????tar -c (文件名.tar.gz) (要被打包的目錄)
    2:解壓:
    ??????tar -xvzf? file.tar.gz
    3:傳輸文件到另臺機器上:
    ??????scp filename compname:/directory
    4:復制文件和目錄
    ????? cp 文件名或目錄 文件名稱或目錄/路徑
    5:刪除文件或目錄
    ??????rm -rf? file/directory
    6:文字編輯
    ??????vi filename
    7:查看進程
    ?????? ps -a
    8:查看開放的端口
    ?????? netstat -a
    9:讓程序永遠后臺運行
    ???nohup /root/test.php &

    posted @ 2006-09-01 00:50 七匹狼 閱讀(408) | 評論 (4)編輯 收藏
      2006年8月28日
    1:> 用root用戶登陸:
    ?a:啟動ftp:
    ????? 目錄:/etc/init.d
    ????? 命令: ./vsfrpd start
    ?b:啟動apatch:
    ????? 目錄:/usr/local/apache2/bin
    ????? 命令:/apachectl start
    ?c:關閉防火墻:
    ???? 命令:iptables -F

    2:> 切換用戶,啟動oracle數據庫
    ??? a:切換用戶
    ????? 命令:su 用戶名。
    ??? b:啟動oracle數據庫
    ????? 目錄:/usr/app/oracle/product/10.1.0/db-1/bin
    ????? 命令:startup
    ?? c:關閉oracle數據庫?
    ?????????命令:shutdown
    ?? d:啟動監聽器
    ?????????命令:lsnrctl

    3:> 啟動tomcat
    a:切換用戶到common
    ??? 目錄:/usr/local/tomcat/bin
    ??? 命令:./startup.sh
    ?b:關閉tomcat
    ??? 命令:./shutdown.sh

    4:>
    ???重啟Linux服務器
    ?????? a:命令:reboot

    5>
    ???啟動oracle 10g的em
    ?????????emctl start dbconsole
    ?? 停止oracle 10g的em
    ?????????emctl stop dbconsole
    posted @ 2006-08-28 10:42 七匹狼 閱讀(705) | 評論 (0)編輯 收藏
    在診斷數據庫系統性能的過程中,總會涉及到跟蹤效率低下的sql語句,現在就如何跟蹤sql語句來做一個簡單的總結。權做拋磚引玉之用。   如果我們可以修改應用系統的源代碼,則可以直接在程序中加入如下的語句:

    1)alter session set timed_statistics=true; /*適用于Oracle 7.3以后的版本*/
    2)alter session set max_dump_file_size=unlimited ; /*適用于Oracle 7.3以后的版本*/
    3)alter session set tracefile_identifier='POX20031031a'; /*適用于Oracle 8.1.7以后的版本*/
    4)alter session set events '10046 trace name context forever, level 8'; /*在這里編寫應用程序的代碼*/
    5)alter session set events '10046 trace name context off';   

    在上述語句中,
    語句1)是把該會話的時間統計打開,該參數默認為false.在Oracle 7.3之前的版本中,不能在會話級設置該參數,只能修改初始化文件然后重新啟動數據庫,這樣將在實例級打開時間統計。
      
    語句2)是把跟蹤文件的大小設置成操作系統所允許的最大尺寸,這樣可以防止跟蹤文件在完成所需要的跟蹤之前被填充滿,此外需要注意的是確保存放跟蹤文件的目錄要有足夠的空間,否則將會收到“文件系統已滿”錯誤。  

    語句3)的作用是使生成的跟蹤文件名稱中包含'POX20031031a'字符串,這樣可以使你很容易的找到所需的跟蹤文件,該參數在Oracle 8.1.7之后可用。  語句4)和語句5)的作用分別是打開和關閉跟sql跟蹤,你可以在這兩個語句之間寫入應用程序的代碼,這些代碼的執行情況都將被跟蹤。需要注意的是語句4)的level關鍵字,它用來指定跟蹤級別,一共有0,1,2,4,8,12六個級別可以設置,0相當于關閉跟蹤;1是輸出一般的跟蹤信息,不包括綁定變量和等待信息;2和1相同;4是在級別1的基礎上增加綁定變量信息;8是在級別1的基礎上增加等待信息;級別12是輸出包含級別1,4,8的所有信息。
    ?  如果應用程序的代碼無法修改或者是不想去修改,則可以在其他會話中打開對特定會話的跟蹤,方法如下:  
    1)sys.dbms_system.set_bool_param_in_session(:sid, :serial,'timed_statistics', true); 
     
    2)sys.dbms_system.set_int_param_in_session( :sid, :serial,'max_dump_file_size', 2147483647);  打開和關閉跟蹤的第一種方法(oracle推薦):
     
    3.1)sys.dbms_support.start_trace_in_session(:sid, :serial,waits=>true, binds=>false);  /* 在此期間運行要跟蹤的應用程序*/   

    4.1)sys.dbms_support.stop_trace_in_session(:sid, :serial);  
    打開和關閉跟蹤的第二種方法:  
    3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 8, '');  /*在此期間運行要跟蹤的應用程序*/   
    3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 0, '');  
     
    以上語句中的:sid和:serial分別代表所要跟蹤的會話的ID和序列號,這些信息可以從V$SESSION視圖的SID和SERIAL#列獲得。打開關閉跟蹤中第一種方法的好處是你不用自己寫10046這個事件號,這樣可以減少錯誤,但是dbms_support程序包在你的數據庫中可能會不存在,這樣就只有用第二種方法了。   到現在為止,我們已經生成了所需要的跟蹤文件,然后我們需要找到該文件來進行分析。跟蹤文件的存放位置只有兩種可能,Oracle參數USER_DUMP_DEST 或者BACKGROUND_DUMP_DEST或者是oracle_home\udump指定的目錄;文件名稱根據不同的平臺會有所不同,但是在文件名中都會包含會話所對應的操作系統進程(線程)號,也就是V$PROCESS的SPID列(V$PROCESS.SPID) ,該信息可以通過 v$process.addr和v$session.paddr做表連接查詢得到。例如:select spid from v$process p,v$session s where p.addr=s.paddr and s.sid=:sid and s.serial#=:serial.   本文只對Oracle在使用專用服務器進程(Dedicated Server)模式做了總結,至于的共享服務器(Shared Server)模式和在應用級使用連接池的情況下,收集sql跟蹤信息的方法會比較復雜,希望有相關經驗的高手來總結。
    posted @ 2006-08-28 00:19 七匹狼 閱讀(438) | 評論 (0)編輯 收藏
    視圖 作用
    ALL_COL_PRIVS 表示列上的授權,用戶和PUBLIC是被授予者
    ALL_COL_PRIVS_MADE 表示列上的授權,用戶是屬主和被授予者
    ALL_COL_RECD 表示列上的授權,用戶和PUBLIC是被授予者
    ALL_TAB_PRIVS 表示對象上的授權,用戶是PUBLIC或被授予者或用戶是屬主
    ALL_TAB_PRIVS_MADE 表示對象上的權限,用戶是屬主或授予者
    ALL_TAB_PRIVS_RECD 表示對象上的權限, 用戶是PUBLIC或被授予者
    DBA_COL_PRIVS 數據庫列上的所有授權
    DBA_ROLE_PRIVS 顯示已授予用戶或其他角色的角色
    DBA_SYS_PRIVS 已授予用戶或角色的系統權限
    DBA_TAB_PRIVS 數據庫對象上的所有權限
    ROLE_ROLE_PRIVS 顯示已授予用戶的角色
    ROLE_SYS_PRIVS 顯示通過角色授予用戶的系統權限
    ROLE_TAB_PRIVS 顯示通過角色授予用戶的對象權限
    SESSION_PRIVS 顯示用戶現在可利用的所有系統權限
    USER_COL_PRIVS 顯示列上的權限,用戶是屬主、授予者或被授予者
    USER_COL_PRIVS_MADE 顯示列上已授予的權限,用戶是屬主或授予者
    USER_COL_PRIVS_RECD 顯示列上已授予的權限,用戶是屬主或被授予者
    USER_ROLE_PRIVS 顯示已授予給用戶的所有角色
    USER_SYS_PRIVS 顯示已授予給用戶的所有系統權限
    USER_TAB_PRIVS 顯示已授予給用戶的所有對象權限
    USER_TAB_PRIVS_MADE 顯示已授予給其他用戶的對象權限,用戶是屬主
    USER_TAB_PRIVS_RECD 顯示已授予給其他用戶的對象權限,用戶是被授予者
    posted @ 2006-08-28 00:04 七匹狼 閱讀(644) | 評論 (1)編輯 收藏
      2006年8月25日
    1:先在oracle數據庫中找到鎖住的對象:
    select xidusn, object_id, session_id, locked_mode from v$locked_object;

    2:得到session_id。再根據session_id找到v$session對應的sid號和serial#:
    select username,sid,serial# from v$session where sid=session_id;

    3:用oracle的slq kill掉相關的session sql語句:
    ???alter system kill session 'sid,serial#';

    4:如果不能kill掉,報ora-00031錯:說明之前有kill過,這樣找到這個進程spid slq語句:
    ???select pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;

    5:根據這個spid對應linux下的進程pid
    ???linux命令:
    ???ps -ef? | gre | 'ora' (找到所有ora開頭的進程)

    ?? kill? -9 (pid)

    6:搞定收工。



    ???
    posted @ 2006-08-25 10:46 七匹狼 閱讀(2451) | 評論 (3)編輯 收藏
      2006年8月24日
    DML會產生行鎖,只有該行的鎖解開后才可繼續對改行進行其他的DML,若新的DML和舊的DML操作的行相同,且舊DML以把行改變,則新DML不起作用

    準備工作:
    SQL>create table lck (a number, b number);
    SQL>insert into lck values (1,1);
    SQL>insert into lck values (2,2);
    SQL>insert into lck values (3,3);
    SQL>insert into lck values (4,4);
    SQL>insert into lck values (5,5);
    SQL>insert into lck values (6,6);
    SQL>insert into lck values (7,7);
    SQL>commit;

    實驗過程:

    步 驟Session 14Session 10說明
    1SQL> select sid from v$session
    where audsid=
    userenv('SESSIONID');

    SID
    ----------
    14
    SQL> select sid from v$session
    where audsid=
    userenv('SESSIONID');

    SID
    ----------
    10
    獲得當前session的SID
    2SQL> insert into lck values (1000,1001);

    1 row created.
     未提交
    3SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    14 TX 262153 6 0
    14 TM 4145 3 0
     因為Session14的DML未提交,因此在v$lock里產生2個鎖,一個為:transaction lock(TX),另一個為:DML/table lock(TM).LMODE=3代表:行排它.LMODE=6代表:對象排它
    4SQL> insert into lck values (1001,1000);

    1 row created.
     未提交
    5SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    14 TX 262153 6 0
    14 TM 4145 3 0
    SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7

    7 rows selected.
    v$lock中并不會因為對該表的再一次DML且未提交而新生成鎖
    6 SQL>update lck set a=2000,b=2001
    where a=1;

    1 row updated.
    未提交
    7SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
    SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    10 TX 327698 6 0
    10 TM 4145 3 0
    14 TX 262153 6 0
    14 TM 4145 3 0
    v$lock中對另外session10的DML產生了鎖
    8SQL>update lck set a=4000,b=2001
    where a=1;
     session10發出更新a=1行的SQL后,session14也發出更新a=1行的SQL,則后者的SQL懸在那里,無法結束
    9SQL> select event, seconds_in_wait, sid from v$session_wait where sid in (10,14);

    EVENT SECONDS_IN_WAIT SID
    ---------------------------------------------------------------- --------------- ----------
    enq: TX - row lock contention 1593 14
    SQL*Net message from client 2862 10
    v$session_wait中可以看到哪個session在等待,等待原因和已經等待的時間
    100 rows updated.
     
    SQL>commit;

    Commit complete.
    只有在session10提交該DML后,session14才執行完,但更新為0行
    11SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
    SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
     

    筆記來源: http://www.adp-gmbh.ch/ora/concepts/lock.html

    posted @ 2006-08-24 13:14 七匹狼 閱讀(1863) | 評論 (2)編輯 收藏
    我們在操作數據庫的時候,有時候會由于操作不當引起數據庫表被鎖定,這么我們經常不知所措,不知怎么給這些表解鎖,在pl/sql Developer工具的的菜單“tools”里面的“sessions”可以查詢現在存在的會話,但是我們很難找到那個會話被鎖定了,想找到所以被鎖的會話就更難了,下面這叫查詢語句可以查詢出所以被鎖的會話。如下:

    SELECT?? sn.username, m.SID,sn.SERIAL#, m.TYPE,
    ???????? DECODE (m.lmode,
    ???????????????? 0, 'None',
    ???????????????? 1, 'Null',
    ???????????????? 2, 'Row Share',
    ???????????????? 3, 'Row Excl.',
    ???????????????? 4, 'Share',
    ???????????????? 5, 'S/Row Excl.',
    ???????????????? 6, 'Exclusive',
    ???????????????? lmode, LTRIM (TO_CHAR (lmode, '990'))
    ??????????????? ) lmode,
    ???????? DECODE (m.request,
    ???????????????? 0, 'None',
    ???????????????? 1, 'Null',
    ???????????????? 2, 'Row Share',
    ???????????????? 3, 'Row Excl.',
    ???????????????? 4, 'Share',
    ???????????????? 5, 'S/Row Excl.',
    ???????????????? 6, 'Exclusive',
    ???????????????? request, LTRIM (TO_CHAR (m.request, '990'))
    ??????????????? ) request,
    ???????? m.id1, m.id2
    ??? FROM v$session sn, v$lock m
    ?? WHERE (sn.SID = m.SID AND m.request != 0)????????
    ????? OR (??? sn.SID = m.SID???????????????????????
    ????????? AND m.request = 0
    ????????? AND lmode != 4
    ????????? AND (id1, id2) IN (
    ??????????????????????? SELECT s.id1, s.id2
    ????????????????????????? FROM v$lock s
    ???????????????????????? WHERE request != 0 AND s.id1 = m.id1
    ?????????????????????????????? AND s.id2 = m.id2)
    ???????? )ORDER BY id1, id2, m.request;
    通過以上查詢知道了sid和 SERIAL#就可以開殺了
    ?? alter system kill session 'sid,SERIAL#';
    posted @ 2006-08-24 11:32 七匹狼 閱讀(2752) | 評論 (1)編輯 收藏
    僅列出標題  
    主站蜘蛛池模板: MM131亚洲国产美女久久| 女人18毛片免费观看| 亚洲欧洲日产国码无码久久99 | 国产又大又黑又粗免费视频| 7777久久亚洲中文字幕| 国产成人精品免费视频大| 亚洲成年人免费网站| 在线精品一卡乱码免费| 成人区精品一区二区不卡亚洲| 一二三四免费观看在线视频中文版 | 免费日本黄色网址| 精品免费AV一区二区三区| 免费欧洲美女牲交视频| 久久久久女教师免费一区| 亚洲国产精品无码久久SM| 免费无码一区二区三区 | 亚洲精品无码mⅴ在线观看| 日本免费v片一二三区| 免费福利在线观看| 国产亚洲精品自在久久| 免费无码中文字幕A级毛片| 77777午夜亚洲| 亚洲精品专区在线观看| 久久免费精品视频| 亚洲人成人77777在线播放| 国产成人涩涩涩视频在线观看免费| jizz免费一区二区三区| 久久精品国产亚洲av日韩| 在线免费观看视频你懂的| 一边摸一边桶一边脱免费视频| 亚洲福利视频导航| 最近中文字幕免费mv视频8| 老司机午夜性生免费福利| 久久久久亚洲精品无码系列| 99re热免费精品视频观看| 男男gay做爽爽的视频免费| 色拍自拍亚洲综合图区| 四虎影永久在线高清免费| 无码人妻丰满熟妇区免费| 亚洲国产精品ⅴa在线观看| 国产av无码专区亚洲av果冻传媒|