DROP USER過程中出現的奇怪的物件資訊
在刪除使用者的時候,在後臺查詢了一下DBA_SEGMENTS檢視,結果發現其他的物件資訊。
在一個會話上執行使用者的刪除操作:
SQL> SELECT DISTINCT OWNER, TABLESPACE_NAME FROM DBA_SEGMENTS;
OWNER TABLESPACE_NAME
------------------------------ ------------------------------
SYSTEM SYSAUX
SYSMAN SYSAUX
SYS SYSTEM
OUTLN SYSTEM
DBSNMP SYSAUX
GPO_OPERATOR GPO
WMSYS SYSAUX
ORDSYS SYSAUX
MDSYS SYSAUX
ZHEJIANG_KHD ZHEJIANG
SYS UNDOTBS2
SYSTEM SYSTEM
TSMSYS SYSAUX
EXFSYS SYSAUX
CTXSYS SYSAUX
DMSYS SYSAUX
NDMAIN NDMAIN
SPOTLIGHT SYSAUX
SYS UNDOTBS1
SYS SYSAUX
XDB SYSAUX
OLAPSYS SYSAUX
GPO GPO
GPO_BUYER_CATALOG GPO
ZHEJIANG ZHEJIANG
GPO_SHANGHAI_DATA GPO
ZHEJIANG_OPERATOR ZHEJIANG
GPO_SALER_BID GPO
已選擇28行。
SQL> SELECT COUNT(*)
2 FROM DBA_SEGMENTS
3 WHERE TABLESPACE_NAME = 'GPO';
COUNT(*)
----------
1550
SQL> BEGIN
2 FOR I IN (SELECT USERNAME FROM DBA_USERS WHERE USERNAME LIKE 'GPO%') LOOP
3 EXECUTE IMMEDIATE 'DROP USER ' || I.USERNAME || ' CASCADE';
4 END LOOP;
5 END;
6 /
PL/SQL 過程已成功完成。
在DROP USER的過程中,在另一個會話中檢查DBA_SEGEMNTS檢視,意外發現了奇怪的物件:
SQL> SELECT OWNER, SEGMENT_NAME, TABLESPACE_NAME
2 FROM DBA_SEGMENTS
3 WHERE TABLESPACE_NAME = 'GPO';
OWNER SEGMENT_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
GPO GPO_BAL_ORG_DEFRAY_HIS GPO
GPO GPO_BAL_ORG_DEFRAY_LOG GPO
GPO GPO_BAL_ORG_PRO GPO
GPO GPO_BAL_USER_INFO GPO
GPO GPO_BID_NOTICE GPO
.
.
.
GPO IDX_GPO_BID_RESULT_PROD GPO
GPO IDX_GPO_HIT_COMM_1 GPO
GPO 41.97672 GPO
GPO 41.16904 GPO
已選擇153行。
其他物件都很正常,但是最後兩個物件名稱很奇怪,可以確定這兩個物件的名稱不是使用者建立時指定的。
由於同時在執行刪除操作,很可能是Oracle在刪除物件時從資料字典中去掉了一些資訊,導致了這樣的顯示結果。
不過這兩個物件的名稱肯定有一定的意義,肯定不可能是兩個任意的小數。
前面那個41難道是執行DROP使用者的會話:
SQL> SELECT COUNT(*)
2 FROM DBA_SEGMENTS
3 WHERE TABLESPACE_NAME = 'GPO';
COUNT(*)
----------
0
SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1;
SID
----------
312
回到刪除使用者的會話執行上面的SQL,發現會話ID是312。看來和會話資訊沒有關係。
既然是DBA_SEGMENTS,那麼這個數字多半和儲存位置有關係,難道是FILE.BLOCK的格式,檢查資料檔案:
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME
2 FROM DBA_DATA_FILES
3 WHERE FILE_ID = 41;
FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
41 +MEMBER/tradedb/tradedb_gpo_2_4g GPO
這個結果已經足夠說明問題了。不過由於物件已經被刪除,因此從DBA_EXTENTS檢視中無法獲得刪除物件的BLOCK資訊,即使使用閃回查詢也得不到結果。
幸好當時資料庫是利用利用源資料庫的備份恢復出來的,因此物理結構和源資料庫保持一致。在源資料庫中對DBA_EXTENTS進行查詢:
SQL> SELECT OWNER, SEGMENT_NAME
2 FROM DBA_EXTENTS
3 WHERE FILE_ID = 41
4 AND BLOCK_ID <= 16904
5 AND BLOCK_ID + BLOCKS >= 16904;
OWNER SEGMENT_NAME
------------------------------ --------------------------------------------------
GPO GPO_BAL_ORG_DEFRAY
SQL> SELECT OWNER, SEGMENT_NAME
2 FROM DBA_EXTENTS
3 WHERE FILE_ID = 41
4 AND BLOCK_ID <= 97672
5 AND BLOCK_ID + BLOCKS >= 97672;
OWNER SEGMENT_NAME
------------------------------ -------------------------------------------------
GPO PK_GPO_BAL_ORG_DEFRAY
不用再做進一步的查詢,從名稱上已經可以看到二者是表和主鍵的關係。
其實不只是刪除物件的過程,在新增物件時,也可能出現這種臨時物件:
SQL> BEGIN
2 FOR I IN 1..2 LOOP
3 EXECUTE IMMEDIATE 'CREATE TABLE T' || I || ' AS SELECT * FROM DBA_OBJECTS';
4 END LOOP;
5 END;
6 /
PL/SQL procedure successfully completed.
在這個SQL的執行過程中,在另一個節點上執行查詢:
SQL> SELECT OWNER, SEGMENT_NAME, TABLESPACE_NAME
2 FROM DBA_SEGMENTS
3 WHERE TABLESPACE_NAME = 'YANGTK'
4 AND WNER = 'A';
OWNER SEGMENT_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
A T1 YANGTK
A T2 YANGTK
A T3 YANGTK
A T4 YANGTK
A T5 YANGTK
A T6 YANGTK
A T7 YANGTK
A T8 YANGTK
A T9 YANGTK
A T10 YANGTK
A T11 YANGTK
A T12 YANGTK
A T13 YANGTK
A T14 YANGTK
A 8.7571 YANGTK
15 rows selected.
等語句執行完成,檢查建立的物件資訊:
SQL> SELECT OWNER, SEGMENT_NAME, TABLESPACE_NAME
2 FROM DBA_EXTENTS
3 WHERE FILE_ID = 8
4 AND BLOCK_ID <= 7571
5 AND BLOCK_ID + BLOCKS >= 7571;
OWNER SEGMENT_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
A T15 YANGTK
Oracle在建立或刪除物件的過程中,可能會臨時使用物件的儲存位置資訊來代替物件的名稱。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-616089/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遷移過程中出現的open failed錯誤AI
- 關於SESSION中出現的奇怪的問題!高手進~~Session
- Oracle中drop user和drop user cascade的區別Oracle
- 奇怪的“物件”物件
- RHEL6安裝過程出現的奇怪的問題
- 一次奇怪的的bug排查過程
- YOLOv3訓練過程中出現過擬合現象的解決方法YOLO
- nuxtjs 安裝過程中出現問題UXJS
- JN專案-幫同事搭建環境過程中出現的問題
- 微服務呼叫中出現傳遞過來的物件為空的幾種情況微服務物件
- 安裝Qt過程中出現g++: command not foundQT
- 淺析大促備戰過程中出現的fullGc,我們能做什麼?GC
- 解決svn遷移過程中出現:SVN Error: is not the same repository as的問題Error
- mysql中delete fro mysql.user where XX和drop user的不同MySqldelete
- JVM(二)——物件的建立過程JVM物件
- 物件的初始化過程物件
- 海外郵件收發過程中出現的各種阻礙怎麼解決
- 安裝過程中出現PKG_CONFIG_PATH的問題解決方法
- 抓取Android平臺資料包之tcpdump 工具的使用過程中出現的問題AndroidTCP
- xPetStore醒置過程中出現找不到users.properties檔案
- PHP5.2.4安裝中出現問題及處理過程PHP
- 多例項監聽配置的測試連線的過程中出現ora-12170的錯誤
- 匯出db裡user的建立和授權的過程
- 搭建ORACLE 10g RAC過程中出現 OUI-25031 的解決辦法Oracle 10gUI
- MySQL複製過程中出現的從庫無法連線主庫的解決辦法MySql
- Java的物件初始化過程Java物件
- maridb Error 'Operation DROP USER failed forErrorAI
- 【每日一MOS】- LGWR的trace日誌中出現Warning資訊
- ORACLE 儲存過程中的Authid Current_UserOracle儲存過程
- shuffle過程中的資訊傳遞
- WriteFile 奇怪的現象
- 安裝graphviz,dot -version 出現奇怪資訊
- 如何通過指令碼匯入master 庫中的user資訊指令碼AST
- [JVM]物件建立過程JVM物件
- React 折騰記 – (2) 實現路由動效過渡,並解決過程中奇奇怪怪的問題React路由
- React 折騰記 - (2) 實現路由動效過渡,並解決過程中奇奇怪怪的問題React路由
- 系統日誌中出現大量的truncating integer value to 32 bits資訊
- Java 物件初始化的過程介紹Java物件