關於oracle資料庫內部殺掉程式及session檢視的測試
測試環境:
OS: rhelas4
DB : oracle10r2
測試目錄:
1:透過session 找到spid,透過作業系統或者oracle層面殺掉程式。
2:透過session和process檢視,找到執行的語句。
測試專案
1:透過session 找到spid,透過作業系統或者oracle層面殺掉程式。
測試步驟:
1:確保oracle已經啟動到open狀態,監聽正常開啟
2:退出所有的crt連線,透過windows的cmd視窗進行登入。
如下:
Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\sxit>cd \
C:\>sqlplus
SQL*Plus: Release 10.1.0.2.0 - Production on 星期四 4月 14 16:14:31 2011
Copyright (c) 1982, 2004, Oracle. All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
注:
a:在oracle10g中,預設都會有scott使用者,透過一個指令碼可以啟用該使用者,linux下的指令碼儲存位置為:
當然也可以用其他已經建立好的使用者登入。
b:透過客戶端登入資料庫,都會啟用口令檔案認證。如果你登入到db server本機上,執行的 sqlplus '/as sysdba' 就是作業系統認證,其實在db server本機隨便輸入任意使用者名稱和密碼,就可以登入到oracle資料庫中,類似於sqlplus sss/ttt as sysdba 都可以登入到oracle資料庫中,因為在資料庫本機登入啟用的是作業系統認真,口令檔案認證失效。當然,你也可以遮蔽作業系統認證,改用口令檔案認證。
3:oracle資料庫分為共享模式和專有模式,具體的原理在這裡就不做介紹了。
一般透過客戶端連線資料庫,都會用到v$session 和 v$process 這兩個檢視。
session----會話
process---程式
客戶端使用者連線資料庫會啟動一個使用者session, 這個session生命週期直到該使用者退出。
seesion建立以後,oracle server會分配一個process為該session服務。(具體要視db是共享還是專有模式而定)
4:當透過windows的cmd視窗,成功登入db以後,執行如下
執行如下語句,需要scott使用者具有create session、select v$session 許可權,關於賦予許可權,請查相關資料。
SQL> select distinct sid from v$mystat;
SID
----------
148
SQL> desc v$session;
名稱 是否為空? 型別
----------------------------------------- -------- -----------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(4)
USER# NUMBER
USERNAME VARCHAR2(30)
COMMAND NUMBER
OWNERID NUMBER
TADDR VARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(12)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(30)
PROGRAM VARCHAR2(48)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDR RAW(4)
PREV_HASH_VALUE NUMBER
PREV_SQL_ID VARCHAR2(13)
PREV_CHILD_NUMBER NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK# NUMBER
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIER VARCHAR2(64)
BLOCKING_SESSION_STATUS VARCHAR2(11)
BLOCKING_INSTANCE NUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(4)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACE VARCHAR2(8)
SQL_TRACE_WAITS VARCHAR2(5)
SQL_TRACE_BINDS VARCHAR2(5)
SQL> select sid,server from v$session where sid=148;
SID SERVER
---------- ------------------
148 DEDICATED
SQL> select sid,paddr from v$session where sid=148;
SID PADDR
---------- --------
148 29E1B254
SQL> select sid,spid from v$process where addr='29E1B254';
select sid,spid from v$process where addr='29E1B254'
*
第 1 行出現錯誤:
ORA-00904: "SID": ?????
SQL> alter session set nls_language=american;
Session altered.
SQL> select pid,spid from v$process where addr='29E1B254';
PID SPID
---------- ------------------------
15 3226
SQL>
從中可以看到spid,這個spid就是作業系統層次的程式id。
[oracle@sphost ~]$ ps -ef |grep 3226
oracle 3226 1 0 18:19 ? 00:00:00 oracleora10 (LOCAL=NO)
5:透過oracle內部殺掉該客戶端程式。
透過oracle 的聯機文件,找到相關語法
When a session is terminated, any active transactions of the session are rolled back, and resources held by the session (such as locks and memory areas) are immediately released and available to other sessions.
You terminate a current session using the SQL statement ALTER SYSTEM KILL SESSION. The following statement terminates the session whose system identifier is 7 and serial number is 15:
ALTER SYSTEM KILL SESSION '7,15'; SQL> select sid,serial# from v$session where sid=148; SID SERIAL#
---------- ----------
148 4 SQL> alter system kill session '148,4';System altered.SQL> 透過oracle內部殺掉該程式以後,即可看到status欄位由原來的inactive變為了killed,oracle的後臺程式pmon會回收該程式的資源和鎖。 6:透過作業系統層面殺掉程式 剛才已經找到了spid,及就是作業系統級別的id,可以透過kill -9 spid 殺掉,但是一般不到萬不得已,不要透過kill的方式殺掉程式。另外,如果直接殺掉oracle的後臺程式的話,會導致oracle重啟。 測試專案:2:透過session和process檢視,找到執行的語句。
測試步驟:
1:oracle監聽正常、資料庫啟動到open狀態
2:scott使用者登入資料庫
3:往scott使用者下插入一條資料
SQL> insert into dept values (50,'ceshi','rossll');
1 row created.
但是一直不提交,簡單的模擬鎖。
4:select * from v$session where username='SCOTT' 注意這裡scott一定要大寫。找到prev_hash_value的值,
經過查詢該值為 2009047607,然後執行如下語句:
select * from v$sql where hash_value='2009047607'
檢視該欄位中的SQL_TEXT ,即就是你執行的語句。
OS: rhelas4
DB : oracle10r2
測試目錄:
1:透過session 找到spid,透過作業系統或者oracle層面殺掉程式。
2:透過session和process檢視,找到執行的語句。
測試專案
1:透過session 找到spid,透過作業系統或者oracle層面殺掉程式。
測試步驟:
1:確保oracle已經啟動到open狀態,監聽正常開啟
2:退出所有的crt連線,透過windows的cmd視窗進行登入。
如下:
Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\sxit>cd \
C:\>sqlplus
SQL*Plus: Release 10.1.0.2.0 - Production on 星期四 4月 14 16:14:31 2011
Copyright (c) 1982, 2004, Oracle. All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
注:
a:在oracle10g中,預設都會有scott使用者,透過一個指令碼可以啟用該使用者,linux下的指令碼儲存位置為:
$ORACLE_HOME/rdbms/admin/utlsampl.sql 。但是要讓該使用者能夠登入資料庫,必須賦予該使用者
create session 等一些基本的系統許可權。關於系統許可權和物件許可權,可以在網上搜搜。當然也可以用其他已經建立好的使用者登入。
b:透過客戶端登入資料庫,都會啟用口令檔案認證。如果你登入到db server本機上,執行的 sqlplus '/as sysdba' 就是作業系統認證,其實在db server本機隨便輸入任意使用者名稱和密碼,就可以登入到oracle資料庫中,類似於sqlplus sss/ttt as sysdba 都可以登入到oracle資料庫中,因為在資料庫本機登入啟用的是作業系統認真,口令檔案認證失效。當然,你也可以遮蔽作業系統認證,改用口令檔案認證。
3:oracle資料庫分為共享模式和專有模式,具體的原理在這裡就不做介紹了。
一般透過客戶端連線資料庫,都會用到v$session 和 v$process 這兩個檢視。
session----會話
process---程式
客戶端使用者連線資料庫會啟動一個使用者session, 這個session生命週期直到該使用者退出。
seesion建立以後,oracle server會分配一個process為該session服務。(具體要視db是共享還是專有模式而定)
4:當透過windows的cmd視窗,成功登入db以後,執行如下
執行如下語句,需要scott使用者具有create session、select v$session 許可權,關於賦予許可權,請查相關資料。
SQL> select distinct sid from v$mystat;
SID
----------
148
SQL> desc v$session;
名稱 是否為空? 型別
----------------------------------------- -------- -----------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(4)
USER# NUMBER
USERNAME VARCHAR2(30)
COMMAND NUMBER
OWNERID NUMBER
TADDR VARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(12)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(30)
PROGRAM VARCHAR2(48)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDR RAW(4)
PREV_HASH_VALUE NUMBER
PREV_SQL_ID VARCHAR2(13)
PREV_CHILD_NUMBER NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK# NUMBER
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIER VARCHAR2(64)
BLOCKING_SESSION_STATUS VARCHAR2(11)
BLOCKING_INSTANCE NUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(4)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACE VARCHAR2(8)
SQL_TRACE_WAITS VARCHAR2(5)
SQL_TRACE_BINDS VARCHAR2(5)
SQL> select sid,server from v$session where sid=148;
SID SERVER
---------- ------------------
148 DEDICATED
SQL> select sid,paddr from v$session where sid=148;
SID PADDR
---------- --------
148 29E1B254
SQL> select sid,spid from v$process where addr='29E1B254';
select sid,spid from v$process where addr='29E1B254'
*
第 1 行出現錯誤:
ORA-00904: "SID": ?????
SQL> alter session set nls_language=american;
Session altered.
SQL> select pid,spid from v$process where addr='29E1B254';
PID SPID
---------- ------------------------
15 3226
SQL>
從中可以看到spid,這個spid就是作業系統層次的程式id。
[oracle@sphost ~]$ ps -ef |grep 3226
oracle 3226 1 0 18:19 ? 00:00:00 oracleora10 (LOCAL=NO)
5:透過oracle內部殺掉該客戶端程式。
透過oracle 的聯機文件,找到相關語法
When a session is terminated, any active transactions of the session are rolled back, and resources held by the session (such as locks and memory areas) are immediately released and available to other sessions.
You terminate a current session using the SQL statement ALTER SYSTEM KILL SESSION. The following statement terminates the session whose system identifier is 7 and serial number is 15:
ALTER SYSTEM KILL SESSION '7,15'; SQL> select sid,serial# from v$session where sid=148; SID SERIAL#
---------- ----------
148 4 SQL> alter system kill session '148,4';System altered.SQL> 透過oracle內部殺掉該程式以後,即可看到status欄位由原來的inactive變為了killed,oracle的後臺程式pmon會回收該程式的資源和鎖。 6:透過作業系統層面殺掉程式 剛才已經找到了spid,及就是作業系統級別的id,可以透過kill -9 spid 殺掉,但是一般不到萬不得已,不要透過kill的方式殺掉程式。另外,如果直接殺掉oracle的後臺程式的話,會導致oracle重啟。 測試專案:2:透過session和process檢視,找到執行的語句。
測試步驟:
1:oracle監聽正常、資料庫啟動到open狀態
2:scott使用者登入資料庫
3:往scott使用者下插入一條資料
SQL> insert into dept values (50,'ceshi','rossll');
1 row created.
但是一直不提交,簡單的模擬鎖。
4:select * from v$session where username='SCOTT' 注意這裡scott一定要大寫。找到prev_hash_value的值,
經過查詢該值為 2009047607,然後執行如下語句:
select * from v$sql where hash_value='2009047607'
檢視該欄位中的SQL_TEXT ,即就是你執行的語句。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-1722305/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 快速殺掉Oracle的SessionOracleSession
- oracle查詢並殺掉鎖表及物件的session及相關係統程式Oracle物件Session
- 關於oracle session的簡單測試OracleSession
- MySQL檢視及殺掉連結方法大全MySql
- oracle例項、資料庫及相關資料庫狀態的理解和測試Oracle資料庫
- 檢視MySql資料庫鎖,並殺死對應程式MySql資料庫
- Oracle內部檢視:X$BHOracle
- 關於資料庫壓力測試的故事資料庫
- 關於修改資料庫引數的測試資料庫
- 如何殺掉Teradata的sessionSession
- Oracle 資料庫檢視與基表的關係Oracle資料庫
- Oracle徹底殺掉程式Oracle
- 通過作業系統的程式號檢視資料庫的session作業系統資料庫Session
- 透過作業系統的程式號檢視資料庫的session作業系統資料庫Session
- dump Oracle資料庫的內部結構Oracle資料庫
- 檢視oracle資料庫----sizeOracle資料庫
- ORACLE物化檢視測試Oracle
- 怎麼殺掉特定的資料庫會話資料庫會話
- 檢視資料庫中的鎖(LOCK),找出程式及SQL資料庫SQL
- 資料庫各個檢視的內容資料庫
- 關於檢視Oracle資料庫執行計劃的命令(set autotrace的用法和含意及區別[轉])Oracle資料庫
- ORACLE之檢視資料庫的SQLOracle資料庫SQL
- 關於資料庫丟失控制檔案的測試資料庫
- oracle資料庫巡檢內容Oracle資料庫
- ORACLE中殺掉一個程式Oracle
- ORACLE 程式的作用及檢視Oracle
- Oracle資料庫DBA日常Sql列表及常用檢視(轉)Oracle資料庫SQL
- Oracle相關資料字典檢視Oracle
- 開源滲透測試工具--關於資料庫資料庫
- 【轉】檢視Oracle資料庫阻塞Oracle資料庫
- 基於圖資料庫 NebulaGraph 實現的欺詐檢測方案及程式碼示例資料庫
- 關於大資料測試,你一定要試試python的fake庫大資料Python
- Oracle不同版本檢視資料庫session/system級別設定了哪些eventsOracle資料庫Session
- Oracle內部檢視:X$BH與X$LEOracle
- 檢視oracle資料庫session事務設定的是哪個隔離級別Oracle資料庫Session
- Oracle 閃回資料庫測試Oracle資料庫
- oracle測試資料庫啟用Oracle資料庫
- oracle生成批量殺掉active程式的sqlOracleSQL