[20140516]取出回滾段資訊.txt
[20140516]取出回滾段資訊.txt
--//後記:以前寫的,原始連結找不到了.感覺2014年的blog丟失很多.
--如果資料庫存在問題,無法啟動,需要利用隱含引數_offline_rollback_segments=(_SYSSMUx$)和_corrupted_rollback_segments=(_SYSSMUx$)
--來遮蔽,可以透過一些隱含資訊啟動資料庫。在資料庫不能啟動的情況下如何取出這些資訊呢?
--如果資料庫正常啟動,可以透過訪問基表sys.undo$獲得這些資訊。
SYS@test> select * from sys.undo$ order by 1;
US# NAME USER# FILE# BLOCK# SCNBAS SCNWRP XACTSQN UNDOSQN INST# STATUS$ TS#
--- --------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
0 SYSTEM 0 1 128 0 0 0 0 0 3 0
1 _SYSSMU1_559505304$ 1 3 128 3270709108 0 15022 6352 0 3 2
2 _SYSSMU2_3752879465$ 1 3 144 3270709112 0 15446 6843 0 3 2
3 _SYSSMU3_2763804800$ 1 3 160 3270709127 0 16739 6684 0 3 2
4 _SYSSMU4_1665036189$ 1 3 176 3270709122 0 16687 6909 0 3 2
5 _SYSSMU5_2973757209$ 1 3 192 3270709126 0 24183 8273 0 3 2
6 _SYSSMU6_3709901187$ 1 3 208 3270709121 0 18062 6880 0 3 2
7 _SYSSMU7_3362111860$ 1 3 224 3270709105 0 15377 6669 0 3 2
8 _SYSSMU8_819560936$ 1 3 240 3270709124 0 16486 6332 0 3 2
...
105 _SYSSMU105_1591595922$ 1 10 72 3241444483 0 16 20 0 2 5 2
106 _SYSSMU106_3193623361$ 1 10 88 3241444824 0 31 22 0 2 5 2
107 _SYSSMU107_642542572$ 1 10 104 3241444482 0 20 16 0 1 5 2
108 _SYSSMU108_2543094915$ 1 11 240 3179752411 0 2 1 0 1 5 2
109 _SYSSMU109_1591452632$ 1 11 256 3179752471 0 2 1 0 1 5 2
110 _SYSSMU110_673028096$ 1 11 272 3179752449 0 2 1 0 1 5 2
111 rows selected.
--我們可以看到,在訪問回滾段4的時候報錯了,但是無法獲得回滾段的時間戳。Oracle 11g中的回滾段名稱的格式如下: _SYSSMUx_時間戳.
-- alter system set "_allow_resetlogs_corruption"=true scope=spfile ;
-- alter system set "_allow_error_simulation"=true scope=spfile ;
-- alter session set "_smu_debug_mode" = 4;
-- alter rollback segment "_SYSSMU1_559505304$" offline;
-- drop rollback segment "_SYSSMU1_559505304$" ;
SYS@test> select distinct substr(rowid,1,15)||'AAA' from sys.undo$ ;
SUBSTR(ROWID,1,15)
------------------------------
AAAAAPAABAAAADiAAA
AAAAAPAABAAAADhAAA
SYS@test> @lookup_rowid AAAAAPAABAAAADiAAA
OBJECT FILE BLOCK ROW DBA TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
15 1 226 0 1,226 alter system dump datafile 1 block 226 ;
SYS@test> @lookup_rowid AAAAAPAABAAAADhAAA
OBJECT FILE BLOCK ROW DBA TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
15 1 225 0 1,225 alter system dump datafile 1 block 225 ;
--可以發現這些資訊存在在file#=1的225,226塊中。如果能啟動的情況下,找到這些資訊是很容易的。
--如果無法啟動,如果確定這些資訊,實際上可以使用bbed或者bvi之類的工具確定。我自己也做一些測試:
1.因為這些資訊一般在資料檔案file#=1的靠前位置,可以取前面10M,這樣資訊基本可以確定。(假設資料塊大小=8K)
-- 10*1024*1024=10485760 10485760/8192 =1280
$ cd /u01/app/oracle11g/oradata/test
$ bvi -b 0 -s 10485760 system01.dbf <=檢索_SYSSMU
001C2100 6E 0C 2B 0C E8 0B A5 0B 63 0B 20 0B E0 0A 9D 0A 5A 0A 17 0A D5 09 93 09 50 09 0D 09 CB 08 88 08 46 08 04 08 C2 07 80 07 3D 07 FB 06 B8 06 77 06 35 06 F2 05 B0 05 6C 05 27 05 E3 04 9F 04 5A 04 n.+.....c. .....Z.......P.......F.......=.....w.5.....l.......Z.
001C2140 C1 07 14 5F 53 59 53 53 4D 55 36 5F 33 37 30 39 39 30 31 31 38 37 24 02 C1 02 02 C1 04 03 C2 03 09 05 C5 21 2D 4C 3C 01 80 04 C3 02 2B 3B 03 C2 3C 44 01 80 2C 00 11 02 C1 03 14 5F 53 59 53 53 ..._SYSSMU6_3709901187$............!-L<.....+;..<D..,......_SYSS
001C2180 4D 55 32 5F 33 37 35 32 38 37 39 34 36 35 24 02 C1 02 02 C1 04 03 C2 02 2D 06 C5 21 47 47 5C 0D 01 80 04 C3 02 37 2F 03 C2 45 2C 01 80 02 C1 04 02 C1 03 FF FF FF FF 02 C1 03 2C 00 11 02 C1 03 MU2_3752879465$.........-..!GG\......7/..E,...............,.....
001C21C0 14 5F 53 59 53 53 4D 55 32 5F 33 37 35 32 38 37 39 34 36 35 24 02 C1 02 02 C1 04 03 C2 02 2D 06 C5 21 47 36 28 25 01 80 03 C3 02 37 03 C2 45 20 01 80 02 C1 04 02 C1 03 FF FF FF FF 02 C1 03 2C ._SYSSMU2_3752879465$.........-..!G6.%.....7..E ...............,
001C2200 00 11 02 C1 05 14 5F 53 59 53 53 4D 55 34 5F 31 36 36 35 30 33 36 31 38 39 24 02 C1 02 02 C1 04 03 C2 02 4D 06 C5 21 47 47 5C 17 01 80 04 C3 02 43 58 03 C2 46 0A 01 80 02 C1 04 02 C1 03 FF FF ......_SYSSMU4_1665036189$.........M..!GG\......CX..F...........
001C2240 FF FF 02 C1 03 2C 00 11 02 C1 05 14 5F 53 59 53 53 4D 55 34 5F 31 36 36 35 30 33 36 31 38 39 24 02 C1 02 02 C1 04 03 C2 02 4D 05 C5 21 47 35 34 01 80 04 C3 02 43 0E 03 C2 45 60 01 80 02 C1 04 .....,......_SYSSMU4_1665036189$.........M...G54.....C...E......
-- 注意: 我看統計,undo$的平均記錄行長=61,前面也出現類似的字元,但是明顯行長相差太大,我看了一下是system的回滾段資訊。
SYS@testdg> @16to10 001C2100
16 to 10 DEC
------------
1843456
SYS@testdg> select 1843456/8192 from dual ;
1843456/8192
------------
225.03125
--基本可以確定在225塊。另外生產系統應該佔用許多塊,至少從這個位置取下面的連續8塊。
--我找另外1個11G資料庫,發現資訊都是從225開始。
--10g的資料庫 106開始。不知道這些是否相對固定。(也有1個例外在54:注該資料庫資料塊大小16K)
2.使用bbed檢視:
BBED> set dba 1,225
DBA 0x004000e1 (4194529 1,225)
BBED> p kdbr
sb2 kdbr[0] @110 8054
sb2 kdbr[1] @112 7985
sb2 kdbr[2] @114 280
...
sb2 kdbr[100] @310 1388
sb2 kdbr[101] @312 1319
sb2 kdbr[102] @314 1251
sb2 kdbr[103] @316 1183
sb2 kdbr[104] @318 1114
--編輯檔案cmd.par
set count 8192
set width 210
set dba 1,225
p *kdbr[0]
x /rnc
p *kdbr[1]
x /rnc
...
p *kdbr[104]
x /rnc
$ cat bbedreadonly.par
blocksize=8192
listfile=/home/oracle11g/bbed/filelist.txt
mode=browse
PASSWORD=blockedit
spool=yes
$ rlwrap -s 9999 -c -r -i -f /usr/local/share/rlwrap/bbed /u01/app/oracle11g/product/11.2.0/db_2/bin/bbed parfile=bbed.par cmdfile=cmd.par
$ grep "_SYSSMU" log.bbd
col 1[19] @8083: _SYSSMU1_559505304$
col 1[20] @378: _SYSSMU2_3752879465$
col 1[20] @8013: _SYSSMU3_2763804800$
col 1[20] @517: _SYSSMU4_1665036189$
......
col 1[21] @1350: _SYSSMU102_486721026$
col 1[21] @1282: _SYSSMU103_918506300$
col 1[22] @1213: _SYSSMU104_1265387071$
--如法炮製,取出226塊的資訊,就可以取出回滾段資訊。
3.使用dd命令:
$ dd if=/u01/app/oracle11g/oradata/test/system01.dbf of=/tmp/225.dd skip=225 count=8 bs=8192
--注意方向不要搞錯!!!!
$ strings /tmp/225.dd | grep -i syssmu | sort -t'_' -k1.8,1.11 -n -t'_'| uniq
_SYSSMU1_559505304$
_SYSSMU2_3752879465$
_SYSSMU3_2763804800$
_SYSSMU4_1665036189$
_SYSSMU5_2973757209$
_SYSSMU6_3709901187$
_SYSSMU7_3362111860$
_SYSSMU8_819560936$
...
_SYSSMU105_1591595922$
_SYSSMU105_1756905781$
_SYSSMU106_3193623361$
_SYSSMU106_972178833$
_SYSSMU107_642542572$
_SYSSMU108_2543094915$
_SYSSMU109_1591452632$
_SYSSMU110_673028096$
$ strings /tmp/225.dd | grep -i syssmu | sort -t'_' -k1.8,1.11 -n -t'_'| uniq |wc
113 113 2456
--前面記錄數110(不包括system回滾段)。存在重複。
--我看了一下也不能以時間戳來確定。回滾段105在使用的是_SYSSMU105_1591595922(時間戳小的)。
總結:
1.dd+strings簡單,快速,但是不準確。
2.使用bbed有點繁瑣,但是準確。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2789249/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入UNDO回滾段,檢視爭用以及回滾段使用量的估算
- [20181222]如何找出回滾操作.txt
- 【UNDO】Oracle系統回滾段說明Oracle
- [20180415]如何取出這幾行資料.txt
- Oracle 資料回滾Oracle
- oracle回滾溯源Oracle
- 實踐資料回滾解決方案
- mysql資料誤刪後的資料回滾MySql
- 入門Kubernetes - 滾動升級/回滾
- Kubernetes:更新與回滾
- Spring Boot 事物回滾Spring Boot
- 回滾與撤銷(一)
- Kubernetes:Pod 升級、回滾
- 談談 Git 程式碼回滾Git
- Spring的事物回滾問題Spring
- [20231008]bbed探究lob段.txt
- 資料庫startup啟動時前滾回滾進行例項恢復的理解資料庫
- 金倉資料庫KingbaseES PLSQL 支援語句級回滾資料庫SQL
- 回滾莫隊學習筆記筆記
- [20191202]tmux共享回話.txtUX
- spring boot 顯示處理事務回滾Spring Boot
- Git回滾程式碼到某個commitGitMIT
- sqlserver遇到回滾事務的操作策略SQLServer
- IDEA程式碼不想提交了,如何回滾Idea
- git遠端分支回滾到指定版本Git
- 關於事務回滾註解@Transactional
- [20181020]lob欄位的索引段.txt索引
- [20191224]集中管理Syslog Server資訊.txtServer
- BZOJ4241: 歷史研究(回滾莫隊)
- Spring Data JPA中事務回滾意外RollbackExceptionSpringException
- 利用oracle的日誌挖掘實現回滾Oracle
- MySQL死鎖案例一(回滾導致死鎖)MySql
- 拉鍊表的建立、查詢和回滾
- Oracle查詢回滾大事務所需時間Oracle
- 淺入Kubernetes(12):Deployment 的升級、回滾
- MySQL實現事務的提交和回滾MySql
- 不能回滾的Redis事務還能用嗎Redis
- [20181024]修改awr收集資訊設定.txt