Способ изменить параметр compatible на значение, которое уже несовместимо с прописанным в контрольном файле, датафайлах и реду.
"Метод в лоб" ;-)
Для реализации будем использовать утилиту BBED. При желании подойдет и обычный hex-редактор. Текущая версия БД - 10.2.0.5
$cat listfile.log
1 /oradata/PRIME/datafile/o1_mf_system_6cttvzbx_.dbf 629145600
2 /oradata/PRIME/datafile/o1_mf_undotbs1_6cttwdjl_.dbf 209715200
3 /oradata/PRIME/datafile/o1_mf_sysaux_6cttwg51_.dbf 304087040
4 /oradata/PRIME/datafile/o1_mf_users_6cxq4s33_.dbf 270663680
-----
BBED: Release 2.0.0.0.0 - Limited Production on Wed Sep 19 11:09:02 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set list 'listfile.log'
LISTFILE listfile.log
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /oradata/PRIME/datafile/o1_mf_system_6cttvzbx_.dbf 76800
2 /oradata/PRIME/datafile/o1_mf_undotbs1_6cttwdjl_.dbf 25600
3 /oradata/PRIME/datafile/o1_mf_sysaux_6cttwg51_.dbf 37120
4 /oradata/PRIME/datafile/o1_mf_users_6cxq4s33_.dbf 33040
Сначала займемся датафайлами. Значение compatible храниться в их заголовках
BBED> set dba 1,1
DBA 0x00400001 (4194305 1,1)
BBED> p kcvfhhdr
struct kcvfhhdr, 76 bytes @20
ub4 kccfhswv @20 0x00000000
ub4 kccfhcvn @24 0x0a200500 --compatible version number
ub4 kccfhdbi @28 0x6be3dfec
text kccfhdbn[0] @32 P
text kccfhdbn[1] @33 R
text kccfhdbn[2] @34 I
text kccfhdbn[3] @35 M
text kccfhdbn[4] @36 E
text kccfhdbn[5] @37
text kccfhdbn[6] @38
text kccfhdbn[7] @39
.......
BBED> d /v dba 1,1 offset 24 count 20
File: /oradata/PRIME/datafile/o1_mf_system_6cttvzbx_.dbf (1)
Block: 1 Offsets: 24 to 43 Dba:0x00400001
-------------------------------------------------------
0a200500 6be3dfec 5052494d 45000000 l . ..kЦъЛPRIME...
00006caf l ..l╞
BBED> set mode edit
MODE Edit
BBED> modify /x 0a200400 dba 1,1 offset 24
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: /oradata/PRIME/datafile/o1_mf_system_6cttvzbx_.dbf (1)
Block: 1 Offsets: 24 to 43 Dba:0x00400001
------------------------------------------------------------------------
0a200400 6be3dfec 5052494d 45000000 00006caf
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0xb594, required = 0xb594
.....
.....
Повторяем для всех датафайлов в списке
Дальше идут редулоги. Этот пункт опциональный. Вместо него можно просто указать RESETLOGS при пересоздании контрольника
BBED> set filename '/oradata/PRIME/onlinelog/o1_mf_1_78tmjvfr_.log'
FILENAME /oradata/PRIME/onlinelog/o1_mf_1_78tmjvfr_.log
BBED> map
File: /oradata/PRIME/onlinelog/o1_mf_1_78tmjvfr_.log (0)
Block: 1 Dba:0x00000000
------------------------------------------------------------
Undo Segment Header
struct kcbh, 20 bytes @0
struct ktect, 44 bytes @20
struct ktetb[1416131173], 11329049384 bytes @64
struct ktuxc, 104 bytes @20
struct ktuxe[1], 40 bytes @124
ub4 tailchk @508
BBED> p ktect
struct ktect, 44 bytes @20
ub4 ktectspare @20 0x0a200500
word ktecttsn @24 1810096108
ub4 ktectobj @28 0x5052494d
ub4 ktectnex @32 0x45000000
ub2 ktecttbe @36 0x0000
ub4 ktectcex @40 0x00019000
ub4 ktectces @44 0x00000200
ub4 ktectcbk @48 0x00010002
struct ktectxid, 8 bytes @52
ub2 kxidusn @52 0x6f8e
ub2 kxidslt @54 0xe30c
ub4 kxidsqn @56 0x00000000
ub1 ktectlck @60 0x00 (NONE)
BBED> modify /x 0a200400 OFFSET 20
File: /oradata/PRIME/onlinelog/o1_mf_1_78tmjvfr_.log (0)
Block: 1 Offsets: 20 to 39 Dba:0x00000000
------------------------------------------------------------------------
0a200400 6be3dfec 5052494d 45000000 00006caf
BBED> sum apply
Check value for File 0, Block 1:
current = 0x0100, required = 0x0100
....
Для всех остальных по аналогии
BBED> exit
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Sep 19 11:35:15 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> STARTUP NOMOUNT
ORACLE instance started.
Total System Global Area 683671552 bytes
Fixed Size 2054632 bytes
Variable Size 440403480 bytes
Database Buffers 234881024 bytes
Redo Buffers 6332416 bytes
SQL> show parameter compat
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 10.2.0.4.0
plsql_v2_compatibility boolean FALSE
SQL> CREATE CONTROLFILE REUSE DATABASE "PRIME" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
MAXLOGMEMBERS 3
3 4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 (
9 '/oradata/PRIME/onlinelog/o1_mf_1_78tmjvfr_.log'
10 ) SIZE 50M,
11 GROUP 2 (
12 '/oradata/PRIME/onlinelog/o1_mf_2_78togbm4_.log'
13 ) SIZE 50M,
14 GROUP 3 (
15 '/oradata/PRIME/onlinelog/o1_mf_3_6cttvy3o_.log'
16 ) SIZE 50M
17 DATAFILE
18 '/oradata/PRIME/datafile/o1_mf_system_6cttvzbx_.dbf',
19 '/oradata/PRIME/datafile/o1_mf_undotbs1_6cttwdjl_.dbf',
20 '/oradata/PRIME/datafile/o1_mf_sysaux_6cttwg51_.dbf',
21 '/oradata/PRIME/datafile/o1_mf_users_6cxq4s33_.dbf'
CHARACTER SET AL32UTF8
22 23 ;
Control file created.
SQL> alter database open;
Database altered.
SQL> show parameter compat
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 10.2.0.4.0
plsql_v2_compatibility boolean FALSE
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
Комментариев нет:
Отправить комментарий