[20181031]如何確定db_link的程式號.txt
[20181031]如何確定db_link的程式號.txt
--//別人問的問題,就是客戶端連線資料庫(A),然後透過db_link連線訪問別的資料庫(B),如果確定資料庫(B)中
--//使用db_link的程式號.
--//關於這個問題,我曾經在連結:http://blog.itpub.net/267265/viewspace-2150595/=>[20180129]db_link使用ezconnect注意.txt
--//做過類似嘗試,當時為了定位開啟db_link的程式,可以講破費一番波折.我那種方式也僅僅適用我當時的測試環境,沒人連線我的測試庫.
--//實際上當客戶端使用db_link時,使用本地的程式號對應(v$process.spid)連線資料庫(B).
--//實際上在資料庫(B),查詢v$session.porcess = 前面v$process.spid值
--//參考連結:http://blog.itpub.net/267265/viewspace-2146724/=>[20171102]檢視v$session中process欄位含義.txt
--//對方資料庫都是windows,windows使用執行緒.這樣相對linux作業系統複雜一點.
--//透過測試說明問題.
1.環境:
SCOTT@test01p> @ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
SCOTT@test01p> CREATE PUBLIC DATABASE LINK LOOPBACK CONNECT TO SCOTT IDENTIFIED BY book USING 'localhost:1521/book:DEDICATED';
Database link created.
--//環境限制,使用一臺機器測試.
2.定位:
SCOTT@test01p> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
87 29146 4848:3848 DEDICATED 6000 25 12 alter system kill session '87,29146' immediate;
--//我當時說過:PROCESS=4848:3848,冒號前4848就是cliend的程式號(PID).後面對應tid(對於windows你可以使用sysinternals的
--//procexp.exe檢視)
D:\tools\rlwrap>tasklist /FI "PID eq 4848"
tasklist /FI "PID eq 4848"
映像名稱 PID 會話名 會話# 記憶體使用
========================= ======== ================ =========== ============
sqlplus.exe 4848 Console 1 19,724 K
--//process對應client的程式號4848.當前連線對應伺服器pid=600(注意windows下使用執行緒,這個也就是執行緒號)
3.開啟db_link看看:
SCOTT@test01p> select sysdate from dual@loopback;
SYSDATE
-------------------
2018-10-18 21:17:08
--//要確定這個db_link的程式號,相當於查詢(如果在linux下):
SCOTT@test01p> select * from v$session where process = '6000';
no rows selected
--//這樣查不行,因為windows看到spid實際上是執行緒號.這樣前面應該還有pid.
SCOTT@test01p> select sid,serial#,process,program,machine,port,paddr from v$session where process like '%:6000';
SID SERIAL# PROCESS PROGRAM MACHINE PORT PADDR
---------- ---------- ------------------------ -------------------------- -------------------- ---------- ----------------
250 57087 5840:6000 ORACLE.EXE ZWS 50991 000007FF09FA99E0
--//ok,這樣查詢就ok了.
SCOTT@test01p> select spid from v$process where addr='000007FF09FA99E0';
SPID
-----
5652
--//可以確定資料庫B看到的程式號就是5652.你也可以查詢埠號50991是否能對上.
D:\tools\rlwrap>netstat -na -o | grep 50991
TCP 127.0.0.1:1521 127.0.0.1:50991 ESTABLISHED 6016
TCP 127.0.0.1:50991 127.0.0.1:1521 ESTABLISHED 5840
--//注意看後面的數值對應pid=5840,就是process的pid部分.
4.最後看看pid=5840,6016是什麼?
D:\tools\rlwrap>tasklist /FI "PID eq 5840"
映像名稱 PID 會話名 會話# 記憶體使用
========================= ======== ================ =========== ============
oracle.exe 5840 Services 0 1,076,996 K
--//這樣就對上,oracle在windows下采用執行緒機制.
D:\tools\rlwrap>tasklist /FI "PID eq 6016"
映像名稱 PID 會話名 會話# 記憶體使用
========================= ======== ================ =========== ============
tnslsnr.exe 6016 Services 0 8,416 K
--//對應監聽程式.
5.使用orakill殺程式看看.
D:\tools\rlwrap>orakill /?
Usage: orakill sid thread
where sid = the Oracle instance to target
thread = the thread id of the thread to kill
The thread id should be retrieved from the spid column of a query such as:
select spid, osuser, s.program from
v$process p, v$session s where p.addr=s.paddr
--//不知道12c能這樣用嗎?
D:\tools\rlwrap>orakill test01p 5652
Could not attach to Oracle instance test01p: err = 203
--//不能使用pdb.實際上應該使用cdb
D:\tools\rlwrap>orakill test 5652
Kill of thread id 5652 in instance test successfully signalled.
--//OK.回到原來會話執行;
SCOTT@test01p> select sysdate from dual@loopback;
select sysdate from dual@loopback
*
ERROR at line 1:
ORA-24757: duplicate transaction identifier
ORA-02063: preceding line from LOOPBACK
--//證明前面的判斷是正確的.db_link連結已經斷開.
SCOTT@test01p> commit ;
commit
*
ERROR at line 1:
ORA-02051: another session or branch in same transaction failed or finalized
SCOTT@test01p> select sysdate from dual;
SYSDATE
-------------------
2018-10-18 21:36:24
SCOTT@test01p> commit ;
Commit complete.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2216852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20190630]如何確定直方圖型別.txt直方圖型別
- [20210817]如何通過bbed確定undo段.txt
- [20181031]模擬網路問題.txt
- [20181031]truncate IDL_UB1$恢復.txt
- [20181031]模擬ora-01591錯誤.txt
- [20181031]lob欄位與布隆過濾.txt
- 樹4-樹的確定與#號建立
- [20181031]12c 線上移動資料檔案.txt
- 在CMakeLists.txt中設定版本號,並在程式碼中呼叫
- 如何確定自己是否適合做程式設計師?程式設計師
- JDK 11 確定將引入 Shebang #! 符號JDK符號
- [20191118]確定linux伺服器cpu數量.txtLinux伺服器
- [20191206]確定sys.file$相關資訊.txt
- 正確使用小程式公眾號
- 如何確定大資料分析的安全大資料
- Mac怎麼建立txt檔案?如何設定新建txt的快捷鍵?Mac
- 如何正確設定動態TextView的textSizeTextView
- 【程式人生】公眾號往期回顧如何設定
- Java如何停止執行緒,確定你知道的都是正確的麼?Java執行緒
- 如何找到埠的程式號
- MySQL如何計算重要的指標,來確定配置是否正確MySql指標
- Git如何確定當前所在分支Git
- 如何正確定義效能瓶頸
- 淺談如何確定伺服器的數量伺服器
- 如何確定DevOps變更的優先順序?dev
- 如何確定敏捷是否適合你的團隊?敏捷
- 如何確定自己是否適合做程式設計師?程式設計師的成長需要什麼?程式設計師
- 如何唯一確定一個 Java 類?Java
- 如何確定Kaizen的實施機會?看完秒懂AI
- [20201202]sed加行號.txt
- IT職場:如何在DFMEA中確定失效的影響程度?
- 身份認證之如何確定你就是“你”?
- 「數倉面試」如何確定主題域?面試
- SAP MM MI01事務程式碼裡的批次確定
- 如何正確的開始用 Go 程式設計Go程式設計
- win10撥號上網如何設定_win10設定撥號上網的步驟Win10
- [20180926]bash與分號.txt
- IT職場:TPM是如何確定裝置維護週期的?