Поиск по этому блогу

пятница, сентября 25, 2009

Признак конца оптимизации

Если результат оптимизации достиг значений этой таблицы. Оптимизация закончена.

Response Time Component --->Duration # Calls ----->Dur/Call
CPU service -----------------------> [small]s >80.0%
[database reads or writes] -----> [small]s <20.0%>[few]
[everything else] -----------------> [small]s <10.0%>[few]
Total -------------------------------> [small]s 100.1

четверг, сентября 24, 2009

Оптимизация производительности. Tracefile - описание

Использовал литературу: Кэри Миллсап, Джефф Хольт Oracle. Оптимизация производительности

Запускаем трассировку запроса.

alter session set max_dump_file_size=unlimited;
alter session set timed_statistics=true;
alter session set events '10046 trace name context forever, level 12';
select 'Hello, world; today is '||sysdate from dual;
exit;

=====================================================================================
Каждая из строк PARSE, EXEC и FETCH (WAIT) отражает выполнение одного вызова базы данных.

Другие статистические показатели:
p - количество блоков Oracle, полученных системными вызовами чтения
cr - обращения к кэшу буферов базы данных, для чтения в согласованном режиме
cu - обращения к кэшу буферов базы данных, для чтения в текущем режиме
mis - количество непопаданий в библиотечный кэш
r - количество возвращенных вызовом строк
tim - позволяет приблизительно оценить время, когда этот вызов был завершен

=====================================================================================
ERROR, UNMAP и SORT UNM

c -
Общее процессорное время, потраченное процессом Oracle в ходе
вызова. Oracle9i измеряет с в микросекундах (1 ис = 0,000001 се-
кунды). В более ранних версиях ядра значение с выражалось в со-
тых долях секунды.
e -
Фактическая продолжительность вызова. Oracle9i измеряет е в мик-
росекундах (1 цс = 0,000001 секунды). В более ранних версиях ядра
значение е выражалось в сотых долях секунды.
p -
Количество блоков базы данных Oracle, полученных вызовом за счет
обращения к дисковой подсистеме ОС. Предполагается, что р озна-
чает первую букву слова - физический, но имейте в ви-
ду, что не каждое так называемое <физическое> чтение Oracle обра-
щается к физическому дисковому устройству. Многие такие чтения
обслуживаются различными кэшами, расположенными между
ядром Oracle и физическим диском.
cr -
Количество блоков базы данных Oracle, полученных вызовом в ре-
жиме согласованного чтения из кэша буферов базы данных Oracle.
Чтение в согласованном режиме может потребовать дополнитель-
ных согласованных чтений из блоков отката, хранящихся в сегмен-
тах отката.
cu -
Количество блоков базы данных Oracle, полученных вызовом в режи-
ме текущего чтения из кэша буферов базы данных Oracle. Чтение
в текущем режиме - это просто чтение текущего содержимого блока.
mis -
Количество непопаданий в библиотечный кэш в ходе вызова. Ре-
зультатом каждого непопадания в библиотечный кэш является опе-
рация полного разбора (hard parse).
r - Количество строк, возвращаемых вызовом.
dep -
Рекурсивная глубина курсора. Курсор глубиной dep=n + 1 является
потомком некоторого курсора глубины dep=n (п = 0, 1, 2, ...).
робнее об этом рассказано ниже в разделе <Двойной учет рекурсив-
ного SQL> данной главы.
og -
1 ALL_R0WS
2 FIRST_ROWS
3 RULE
4 CHOOSE
=====================================================================================
Событие ожидания Oracle.
WAIT сообщает о продолжительности определенной последовательности инструкций,
выполняемой внутри процесса ядра Oracle.
nam -
Имя, присвоенное кем-то из разработчиков ядра Oracle для обозна-
чения того, какая часть ядра Oracle отвечает за данную часть време-
ни отклика.
ela -
Фактическое время, потраченное на исполнение названного события.
Oracle9i измеряет ela в микросекундах (1 цс = 0,000001 секунды).
В более ранних версиях ядра значение ela выражалось в сотых до-
лях секунды.
р1, р2, рЗ -
Значения данных параметров зависят от значения пат. Полный пе-
речень описаний параметров для всех типов событий можно полу-
чить, выполнив такой SQL-код:
select name, parameter"!, parameter2, parameter3
from v$event_name order by name

Cтроки WAIT появляются в файле трассировки до
строки того вызова базы данных, результатом которого является данное
событие ожидания.

=====================================================================================
Строки STAT содержат сведения о плане выполнения и времени отклика, выбранном
оптимизатором запросов Oracle для выполнения команд SQL.
=====================================================================================

Cтрока XCTEND появляется в том случае, когда исследуемое приложение выполняет
команду фиксации или отката.

=====================================================================================
Каждая лексема PARSING IN CURSOR указывает на рождение (или возрождение)
курсора.


Каждая строка файла трассировки соответствует одному <действию>,
выполненному процессом ядра Oracle. Имеющиеся в каждой строке
символы #ID идентифицируют курсор, согласно которому ядро выпол-
няло действие. Например, приведенная ниже строка соответствует вы-
борке по курсору #1:
FETCH #1:с=0,е=177,р=0,cr=1,cu=2,mis=0,r=1,dep=O,og=4,tim=1038931660054596


Строка, начинающаяся с лексемы ***, указывает системное время, полученное непосредственно
перед передачей строки *** в файл трассировки. Эта информация помогает аналитику по
производительности установить соответствие между показаниями времени tim в статистике Oracle.
Это удобно, потому что позволяет восстановить синхронизацию событий с фактическим временем
после больших интервалов строк WAIT, содержащих приблизительное истекшее время (ela), а не
значения внутренних часов (tim).


Строка, содержащая лексему SESSION ID: (m. л), идентифицирует строки файла трассировки,
следующие за ней, как относящиеся к сеансу Oracle с идентификатором V$SESSION.SID=m
и порядковым номером V$SESSION SERIAL#=n.

Сама строка PARSING IN CURSOR содержит информацию об идентификато-
ре курсора #ID. Текст между строкой PARSING IN CURSOR и соответствую-
щей строкой END OF STMT - это собственно SQL-текст курсора

len - Длина текста SQL.
dep -
Рекурсивная глубина курсора. Курсор глубиной dep=ra + 1 является
потомком некоторого курсора глубиной dep=n (п = 0,1, 2,...). Некото-
рые действия приводят к использованию рекурсивного SQL, напри-
мер вызовы базы данных, которым необходима информация из сло-
варя БД; команды, запускающие триггеры; PL/SQL-блоки, содер-
жащие команды SQL. В разделе <Двойной учет рекурсивного SQL>
далее в этой главе мы продолжим разговор о рекурсивных отноше-
ниях в SQL.
uid - Идентификатор пользователя, выполняющего разбор команды.
oct - Идентификатор типа команды Oracle [Oracle OCI (1999)].
lid -
Идентификатор пользователя, обладающего привилегиями. Так,
если пользователь FRED вызывает пакет, принадлежащий пользова-
телю JOE, то для команды SQL, выполненной внутри пакета, uid бу-
дет ссылаться на FRED, a lid - на JOE.
Проверка в Oracle версии 9 показала, что независимо от того, вы-
полнялась ли программа под привилегиями владельца или под при-
вилегиями вызвавшего ее пользователя, uid и lid в файле трасси-
ровки имеют одно и то же значение: идентификатор пользователя,
зарегистрировавшегося в системе и вызвавшего эту программу.
tim -
Если значение tim равно 0, значит, параметр инициализации T1MED_
STATISTICS имел значение FALSE в момент, когда должно было подсчи-
тываться время вызова. Таким образом, на основе значений tim мож-
но сделать вывод о том, какое значение имел параметр инициализа-
ции TIMED_STATISTICS. В процессе работы мы с коллегами пришли к
выводу о том, что конкретные ненулевые значения tim, относящиеся
к секциям PARSING IN CURSOR, не представляют особого интереса.
В Огас1е9г значение tim измеряется в микросекундах (1 ис = 0,000001
секунды). В некоторых системах (например, на наших Linux-серве-
рах) значения поля tim - это чистые значения gettimeofday. В дру-
гих системах (например, на наших Windows-компьютерах) проис-
хождение значений поля tim может быть весьма загадочным. В вер-
сиях, предшествующих Oracle9?, tim было значением V$TIMER. HSECS,
выраженным в сотых долях секунды.
hv -
Идентификатор команды SQL. Может показаться, что значение hv
уникально, но это не так Может случиться (хотя это бывает редко),
что разные тексты SQL имеют одинаковые значения hv.
ad - Адрес курсора в библиотечном кэше, как это показано в V$SQL.

=====================================================================================

когда ядро Oracle связывает значения с заполнителями в SQL-тексте приложе-
ния, то ядро выводит в файл трассировки секцию BIND. Номер,
следующий за словом , указывает позицию (порядковый номер,
начиная с 0) переменной связывания в тексте SQL.
dty
Внешний тип данных значения, переданного приложением [Oracle
OCI (1999)]. В Oracle определены два набора типов данных: внут-
ренний и внешний. Определения внутреннего типа данных показы-
вают, каким образом ядро Oracle хранит свои данные в операцион-
ной системе, а определения внешнего типа - каким образом ядро
Oracle взаимодействует с SQL-кодом приложения.
Внешний тип данных переменной связывания весьма важен. Время
от времени встречаются команды SQL, для которых оптимизатор
запросов Oracle отказывается использовать индекс, безусловно, по-
могающий делу. Иногда это вызвано несоответствием типа столбца
типу значения, что может привести к выполнению для столбца
функции неявного приведения типа, что не позволит оптимизатору
выбрать данный индекс.
avl
Длина связываемого значения (в байтах).
value
Значение, которое передается в выполняемую команду. Ядро Oracle
может усекать значения, передаваемые в файл трассировки. По-
нять, что это произошло, несложно - усечение будет иметь место
всегда, когда значение avl превышает длину поля value.
Если значение value не попало в файл трассировки, значит, пере-
менная-заполнитель была связана со значением NULL. Так, в приве-
денном выше примере f nd_profile. get_specif ic отсутствие поля value
в секции bind 4 говорит о том, что приложение передало NULL в ка-
честве значения заполнителя :val. Это подтверждается нулевой
длиной (avl=OO) значения переменной связывания.

=====================================================================================

Если в момент закрытия курсора включена трассировка SQL уровня 1,
то ядро Oracle передает в файл трассировки по одной строке STAT для
Справочник по данным расширенной трассировки SQL 119
каждой операции над источником строк из плана выполнения запро-
са

id
Уникальный идентификатор операции над источником строк внут-
ри множества строк STAT.
cnt
Количество строк, возвращенных данной операцией над источни-
ком строк.
pid
Идентификатор операции, родительской по отношению к данной.
pos
Произвольное число - ничего лучше не придумать. Можно предпо-
ложить, что это значение могло бы определять <позицию> операции
над источником данных во множестве операций, принадлежащих
одному родителю, но похоже, что сестринские операции над источ-
ником данных упорядочены по возрастанию идентификаторов.
obj
Идентификатор объекта для операции над источником строк, если
операция выполняется над <базовым объектом>.1 Такие операции
над источником строк, как NESTED LOOPS, которые сами не обращают-
ся к базовому объекту, имеют obj =0. (Дочерние операции для NESTED
LOOPS обращаются к базовым объектам, но сама операция NESTED
LOOPS над источником данных этого не делает.)
op
Имя операции над источником данных. Начиная с версии Oracle
9.2.0.2.0, ядро передает дополнительную информацию в строки
STAT [Rivenes (2003)]. Новая информация включает в себя ряд по-
лезных характеристик для каждой операции над источником
строк, а именно:
cr - Количество чтений в согласованном режиме.
r - Количество блоков Oracle, прочитанных вызовами чтения ОС.
w - Количество блоков Oracle, записанных вызовами записи ОС.
time -
Фактическая длительность (в микросекундах).
Статистика для родительской операции над источником строк
включает в себя статистики для ее потомков.

=====================================================================================

Каждая строка XCTEND содержит следующие сведения о работе, выпол-
няемой в ходе фиксации или отката транзакции:
rlbk
Истина (1) - в том и только в том случае, если транзакция была от-
качена.
rd_only
Истина (1) - в том и только в том случае, если транзакция не изме-
нила никаких данных в базе данных.

=====================================================================================

Рекурсивный SQL - это SQL, соответствующий вызову базы данных,
значение dep которого больше нуля. Вызов базы данных глубиной
dep=n + 1 (п = О, 1, 2, ...) можно рассматривать как потомка какого-то
вызова базы данных со значением dep=ra


пятница, июля 03, 2009

Изменение размера Logfile на Primary и Standby

По логам увидел, что переключение на пике работы происходит 3 или 30 секунд. Обычная работа базы - переключение 3-6 минут. Oracle рекомендует 15-20 минут.

#смотрим чтобы удаляемый logfile не был текущим или активным. Хоть Оракл и проругается
#береженого бог бережет.
select * from v$log;

alter system switch logfile;
alter database drop logfile group 1;
alter database add logfile group 1 ('g:\oracle\...\acs_log1a','h:\oracle\...\acs_log1b') size 100M reuse;

alter system switch logfile;
alter database drop logfile group 2;
alter database add logfile group 2 ('g:\oracle\...\acs_log2a','h:\oracle\...\acs_log2b') size 100M reuse;

alter system switch logfile;
alter database drop logfile group 3;
alter database add logfile group 3 ('g:\oracle\...\acs_log3a','h:\oracle\...\acs_log3b') size 100M reuse;

alter system switch logfile;
alter database drop logfile group 4;
alter database add logfile group 4 ('g:\oracle\...\acs_log4a','h:\oracle\...\acs_log4b') size 100M reuse;

alter system switch logfile;
alter database drop logfile group 5;
alter database add logfile group 5 ('g:\oracle\...\acs_log5a','h:\oracle\...\acs_log5b') size 100M reuse;

alter system switch logfile;
alter database drop logfile group 6;
alter database add logfile group 6 ('g:\oracle\...\acs_log6a','h:\oracle\...\acs_log6b') size 100M reuse;


ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'e:\oracle\...\stbycf.f';


#Выполняем на Standby
conn / as sysdba
alter database recover managed standby database cancel;
shutdown immediate

#Копируем ручками вместо старых новые controlfile
#из e:\oracle\admin\acs\backup\stbycf.f в
#f:\oracle\oradata\acs_ctrl1
#g:\oracle\oradata\acs_ctrl2
#h:\oracle\oradata\acs_ctrl3

#Выполняем запуск на Standby
conn / as sysdba
startup nomount
alter database mount standby database;
alter database recover managed standby database disconnect;
или
#alter database recover managed standby database disconnect
from session;


#Зделать на боевой
alter system switch logfile;
#посмотреть логи на Standby убедиться, что архивлог файлы принимаются.

пятница, июня 12, 2009

Описание блока данных.



Каждый дата файл делится на блоки. Размер блока указан в файле инициализации, параметр DB_BLOCK_SIZE. Каждый дата файл имеет заголовок размер которого 20 байт, (further the number of blocks in the data file can be found 24 bytes into the file) Эту строку я для себя перевел как: если количество блоков большое то 24 байта. Блоки различаются по типам: табличные данные, индексные данные, cluster data(шо за зверь пока незнаю). Каждый блок подразделен на секции. Картинка показывает эти секции.
Заголовок блока содержит: тип блока; object id таблицы, индекса или кластера; контрольную сумму. Ниже расположен table directory и еще ниже row directory. Оба переменной длины. row directory содержит информацию о том как много строк с данными в блоке и для каждой этой строки выделено 2 байта, указатель(смещение) на фактическое расположение данных. Чтобы получить адрес данных, нужно отсчитывать смещение от начала row directory. Данные заполняются снизу вверх(от конца блока). При вставке новой строки сами данные заполняют нижнюю часть свободной области, а ссылка на данные (смещение) в row directory соответственно сверху свободной области. Когда блок полностью заполнен, начинается заполнение нового блока.
Каждая строка в блоке имеет 3х байтовый заголовок. Первый байт содержит набор флагов показывающих состояние строки. Как пример установленный 5 бит показывает, что строка удалена. Обычно первый байт содержит 0х2С, если строка удалена 0х3С. Второй байт показывает блокирована ли строка. Третий байт показывает количество столбцов в строке. Если общая сумма превышает 255 байт, то заголовок строки 4 байта учитывающих 65536 байт. После заголовка строки идут данные. Каждый столбец(колонка таблицы) начинается с 1 байта указывающего на размер столбца. Если значение столбца NULL то поле заполняется значением 0xFF.
Пример дампа
189d3790h: 3C 01 11
189d37a0h: 04 C3 06 13 2F 04 C3 06 13 2F 02 C1 37 0D 4D 59
189d37b0h: 5F 54 45 4D 50 5F 54 41 42 4C 45 02 C1 02 FF 02
189d37c0h: C1 03 07 78 6B 03 17 12 08 38 07 78 6B 03 17 12
189d37d0h: 08 38 07 78 6B 03 17 12 08 38 02 C1 02 FF FF 01
189d37e0h: 80 FF 02 C1 07 02 C1 02
Пример столбцов
Col 1 04 C3 06 13 2F
Col 2 04 C3 06 13 2F
Col 3 02 C1 37
Col 4 0D 4D 59 5F 54 45 4D 50 5F 54 41 42 4C 45
Col 5 02 C1 02
Col 6 FF
Col 7 02 C1 03
Col 8 07 78 6B 03 17 12 08 38
Col 9 07 78 6B 03 17 12 08 38
Col 10 07 78 6B 03 17 12 08 38
Col 11 02 C1 02
Col 12 FF
Col 13 FF
Col 14 01 80
Col 15 FF
Col 16 02 C1 07
Col 17 02 C1 02

Когда строка удалена, пространство становится доступным для записи. Но сами данные все еще находятся в блоке, хоть место и помечено как свободное.

среда, июня 03, 2009

Ковыряем BBED. Block Browser and EDitor. Часть 3. Сладенькое. Приводим файлы к одному SCN.

Пример как согласовавать файлы данных. Приводим к одному SCN


[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 2 19:07:46 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.

Как обычно делаю выборку файлов.
SQL> conn / as sysdba;
Connected.

SQL> select file#||' '||name||' '||bytes from v$datafile;
FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------
1 /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf 503316480
2 /home/oracle/oracle/product/10.2.0/oradata/pahom/undotbs01.dbf 36700160
3 /home/oracle/oracle/product/10.2.0/oradata/pahom/sysaux01.dbf 251658240
4 /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf 5242880
5 /home/oracle/oracle/product/10.2.0/oradata/pahom/example01.dbf 104857600

Хочу посмотреть как себя будут чувствовать данные. Поэтому делаю выборку до изменеий.
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
7566 JONES MANAGER 7839 02-APR-81 2975
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
7902 FARD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.


Тушим базу и копируем файл данных /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf
Затем поднимаем базу.Делаем пару каких либо движений. Я решил апдейтить многострадальную строку.


Неудачная попытка. Данные есть но условие выбора не отрабатывает. Потому как мы издевались над этой же строкой в части 2. Перестроим индекс все пойдет. В теории :)
SQL> update scott.emp set ename='FAAD' where empno=7902;
0 rows updated.
SQL> select * from scott.emp where empno=7902;
no rows selected

Все равно меняем эту же строку :)
SQL> update scott.emp set job='ANULIST' where ename='FARD';
1 row updated.
SQL> commit;
Commit complete.

Смотрим чего наменяли
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30

* * * * * *

7902 FARD ANULIST 7566 03-DEC-81 3000
20

7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.

Тушим базу и переименовываем файл данных /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf и копируем на его место файл бэкапа.
SCN которого неправильный.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

Поднимаем базу. И получили ожидаемое.
SQL> startup;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 71305460 bytes
Database Buffers 92274688 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4:
'/home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf'
--------------------------------------------------------------



Начинаем лечебные процедуры.
BBED> set list '/home/oracle/oracle/product/10.2.0/bbed/list2.txt'
LISTFILE /home/oracle/oracle/product/10.2.0/bbed/list2.txt

Смотрим файл /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf. Будет эталоном.
BBED> set file 1
FILE# 1


Смотрим значения kscnbas, kcvcptim, kcvfhcpc, kcvfhccc
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x0008543e
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2909bfb8
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000004
ub4 kcrbabno @504 0x0000f554
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> p kcvfhcpc
ub4 kcvfhcpc @140 0x0000003a

BBED> p kcvfhccc
ub4 kcvfhccc @148 0x00000039

Так как я ленивый и мне лень переворачивать байты. Делаю дамп блока. Ссылки у нас есть.
BBED> dump /v dba 1,1 offset 140 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf (1)
Block: 1 Offsets: 140 to 163 Dba:0x00400001
-------------------------------------------------------
3a000000 6e480929 39000000 00000000 l :...nH.)9.......
00000000 00000000 l ........
<16 bytes per line>

BBED> dump /v dba 1,1 offset 484 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf (1)
Block: 1 Offsets: 484 to 507 Dba:0x00400001
-------------------------------------------------------
3e540800 00000000 b8bf0929 01000a00 l >T...... .)....
04000000 54f50000 l ....T
<16 bytes per line>

Переходим к файлу который будем лечить.
BBED> set file 4
FILE# 4

BBED> set dba 4,1
DBA 0x01000001 (16777217 4,1)

BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x0008529c
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2909bda7
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000004
ub4 kcrbabno @504 0x0000f3d4
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> p kcvfhcpc
ub4 kcvfhcpc @140 0x00000037

BBED> p kcvfhccc
ub4 kcvfhccc @148 0x00000036

BBED> dump /v dba 4,1 offset 140 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 140 to 163 Dba:0x01000001
-------------------------------------------------------
37000000 6e480929 36000000 00000000 l 7...nH.)6.......
00000000 00000000 l ........
<16 bytes per line>

BBED> dump /v dba 4,1 offset 484 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 484 to 507 Dba:0x01000001
-------------------------------------------------------
9c520800 00000000 a7bd0929 01000a00 l .R...... .)....
04000000 d4f30000 l ....
<16 bytes per line>

Как уже говорил забываю про режим редактирования.
BBED> modify /x 3a000000 dba 4,1 offset 140
BBED-00215: editing not allowed in BROWSE mode

BBED> set mode edit
MODE Edit

Подставляем значения из "эталонного" файла всем четырем параметрам указанным выше (kscnbas, kcvcptim, kcvfhcpc, kcvfhccc )
BBED> modify /x 3a000000 dba 4,1 offset 140
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 140 to 163 Dba:0x01000001
------------------------------------------------------------------------
3a000000 6e480929 36000000 00000000 00000000 00000000
<32 bytes per line>

BBED> modify /x 39000000 dba 4,1 offset 148
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 148 to 171 Dba:0x01000001
------------------------------------------------------------------------
39000000 00000000 00000000 00000000 00000000 00000000
<32 bytes per line>

BBED> modify /x 3e540800 dba 4,1 offset 484
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 484 to 507 Dba:0x01000001
------------------------------------------------------------------------
3e540800 00000000 a7bd0929 01000a00 04000000 d4f30000
<32 bytes per line>

Вот непонял чего артачится видать слишком большое число. Офигела система маленько
BBED> modify /x b8bf0929 dba 4,1 offset 492
BBED-00209: invalid number (b8bf0929)

Правим меньше байтов.
BBED> modify /x b8bf dba 4,1 offset 492
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 492 to 515 Dba:0x01000001
------------------------------------------------------------------------
b8bf0929 01000a00 04000000 d4f30000 1000ffbf 02000000
<32 bytes per line>

Рихтуем контрольную сумму.
BBED> sum dba 4,1
Check value for File 4, Block 1:
current = 0xd835, required = 0xdc8a

BBED> sum dba 4,1 apply
Check value for File 4, Block 1:
current = 0xdc8a, required = 0xdc8a

Ну так на всяк случай проверяю.
BBED> dump /v dba 4,1 offset 140 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 140 to 163 Dba:0x01000001
-------------------------------------------------------
3a000000 6e480929 39000000 00000000 l :...nH.)9.......
00000000 00000000 l ........
<16 bytes per line>

BBED> dump /v dba 4,1 offset 484 count 24
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 1 Offsets: 484 to 507 Dba:0x01000001
-------------------------------------------------------
3e540800 00000000 b8bf0929 01000a00 l >T...... .)....
04000000 d4f30000 l ....
<16 bytes per line>


------------------------------------------------------------

Тушу базу, так как она в режиме МОУНТ. И стартую.
SQL> startup
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 71305460 bytes
Database Buffers 92274688 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.

Смотрю как там мои данные.
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30

* * * * *

7902 FARD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.

УСЕ

вторник, июня 02, 2009

Ковыряем BBED. Block Browser and EDitor. Часть 2

Первая часть немного палевная. Русское и английское описание. Причем неполное.

Часть 2 посвящена восстановлению удаленной строки. Удаляем в SQL, а восстанавливаем в файле.

Выполним SQL скрипт. Нам нужен список файлов с их номерами и размером.

SQL> select file#||' '||name||' '||bytes from v$datafile;
FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------
1 /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf 503316480
2 /home/oracle/oracle/product/10.2.0/oradata/pahom/undotbs01.dbf 36700160
3 /home/oracle/oracle/product/10.2.0/oradata/pahom/sysaux01.dbf 241172480
4 /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf 5242880
5 /home/oracle/oracle/product/10.2.0/oradata/pahom/example01.dbf 104857600


Сохраняем список в файл list.txt. И подключаем к BBED.

BBED> set list '/home/oracle/oracle/product/10.2.0/bbed/list.txt'
LISTFILE /home/oracle/oracle/product/10.2.0/bbed/list.txt


Смотрим данные над которыми будем издеваться. Определяем ROWID строки. ROWID позволит определить номер файла и номер блока.

SQL> select * from scott.emp where ename='FORD';

EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 03-DEC-81 3000
20

SQL> select rowid from scott.emp where ename='FORD';
ROWID
------------------
AAAMfMAAEAAAAAgAAM

SQL> select dbms_rowid.rowid_relative_fno('AAAMfMAAEAAAAAgAAM') from dual;
DBMS_ROWID.ROWID_RELATIVE_FNO('AAAMFMAAEAAAAAGAAM')
---------------------------------------------------
4

SQL> select dbms_rowid.rowid_block_number('AAAMfMAAEAAAAAgAAM') from dual;
DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAMFMAAEAAAAAGAAM')
---------------------------------------------------
32

SQL> select * from scott.emp where ename='FARD';
no rows selected

SQL> select * from scott.emp where ename='FORD';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 03-DEC-81 3000
20


Делаем активным файл 4(см.список фалов) и блок 32, которые определили SQL скриптами.

BBED> set dba 4,32
DBA 0x01000020 (16777248 4,32)

Поиск в файле данных которые мы определили как мучеников науки.
BBED> find /c FORD
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7668 to 8179 Dba:0x01000020
------------------------------------------------------------------------
464f5244 07414e41 4c595354 03c24c43 0777b50c 03010101 02c21fff 02c1152c
010802c2 50054a41 4d455305 434c4552 4b03c24d 630777b5 0c030101 0103c20a
33ff02c1 1f2c0108 03c24f4d 05414441 4d530543 4c45524b 03c24e59 0777bb05
17010101 02c20cff 02c1152c 010803c2 4f2d0654 55524e45 52085341 4c45534d
414e03c2 4d630777 b5090801 010102c2 10018002 c11f2c01 0803c24f 28044b49
4e470950 52455349 44454e54 ff0777b5 0b110101 0102c233 ff02c10b 2c010803
c24e5905 53434f54 5407414e 414c5953 5403c24c 430777bb 04130101 0102c21f
ff02c115 2c010803 c24e5305 434c4152 4b074d41 4e414745 5203c24f 280777b5
06090101 0103c219 33ff02c1 0b2c0108 03c24d63 05424c41 4b45074d 414e4147
455203c2 4f280777 b5050101 010103c2 1d33ff02 c11f2c01 0803c24d 37064d41
5254494e 0853414c 45534d41 4e03c24d 630777b5 091c0101 0103c20d 3302c20f
02c11f2c 010803c2 4c43054a 4f4e4553 074d414e 41474552 03c24f28 0777b504
02010101 03c21e4c ff02c115 2c010803 c24c1604 57415244 0853414c 45534d41
4e03c24d 630777b5 02160101 0103c20d 3302c206 02c11f2c 010803c2 4b640541
4c4c454e 0853414c 45534d41 4e03c24d 630777b5 02140101 0102c211 02c20402
c11f2c01 0803c24a 4605534d 49544805 434c4552 4b03c250 030777b4 0c110101
<32 bytes per line>

Выведем дамп, чтобы убедиться что мы нашли что искали.
BBED> dump /v dba 4,32 offset 7668 count 64
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7668 to 7731 Dba:0x01000020
-------------------------------------------------------
464f5244 07414e41 4c595354 03c24c43 l FORD.ANALYST. LC
0777b50c 03010101 02c21fff 02c1152c l .w ...... ... .,
010802c2 50054a41 4d455305 434c4552 l ... P.JAMES.CLER
4b03c24d 630777b5 0c030101 0103c20a l K. Mc.w ...... .
<16 bytes per line>

Пытаемся изменить данные напрямую в файле. У нас ошибка :( Читай хелп по BBED.
BBED> modify /c FARD dba 4,32 offset 7668
BBED-00215: editing not allowed in BROWSE mode

Включаем режим редактирования. Специально не убрал ошибку. Часто забываю включить этот режим.
BBED> set mode edit
MODE Edit

Меняем значение. Когда поменял FORD на PAHOM мой блок сказал что он с ошибкой. Потому аккуратнее. Меняем на равное количество символов.
BBED> modify /c FARD dba 4,32 offset 7668
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7668 to 7731 Dba:0x01000020
------------------------------------------------------------------------
46415244 07414e41 4c595354 03c24c43 0777b50c 03010101 02c21fff 02c1152c
010802c2 50054a41 4d455305 434c4552 4b03c24d 630777b5 0c030101 0103c20a
<32 bytes per line>

Мы могли не менять значение, просто чтоб видеть что и такое можно сделать. Смотрим что наменяли.
BBED> dump /v dba 4,32 offset 7668 count 64
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7668 to 7731 Dba:0x01000020
-------------------------------------------------------
46415244 07414e41 4c595354 03c24c43 l FARD.ANALYST. LC
0777b50c 03010101 02c21fff 02c1152c l .w ...... ... .,
010802c2 50054a41 4d455305 434c4552 l ... P.JAMES.CLER
4b03c24d 630777b5 0c030101 0103c20a l K. Mc.w ...... .
<16 bytes per line>

Так как мы наглые и меняем значение сразу в файле. Контрольная сумма у нас не сростается.
BBED> sum dba 4,32
Check value for File 4, Block 32:
current = 0x26a0, required = 0x28a0

Правим контрольную сумму.
BBED> sum dba 4,32 apply
Check value for File 4, Block 32:
current = 0x28a0, required = 0x28a0


Чтобы увидеть изменения в запросе нужно или перестартануть базу или сбросить буфер.
SQL> alter system flush buffer_cache;
System altered.

Проверяем что так оно и есть.
SQL> select * from scott.emp where ename='FORD';
no rows selected

SQL> select * from scott.emp where ename='FARD';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FARD ANALYST 7566 03-DEC-81 3000
20

Берем дамп блока файла. Чтобы сравнить что происходит до и после нашего опыта с восстановлением удаленной строки.
SQL> alter system dump datafile 4 block 32;
System altered.



/home/oracle/oracle/product/10.2.0/db_1/admin/pahom/udump/pahom_ora_7134.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /home/oracle/oracle/product/10.2.0/db_1
System name: Linux
Node name: localhost.localdomain
Release: 2.6.9-78.0.0.0.1.ELsmp
Version: #1 SMP Fri Jul 25 14:41:56 EDT 2008
Machine: i686
Instance name: pahom
Redo thread mounted by this instance: 1
Oracle process number: 15
Unix process pid: 7134, image: oracle@localhost.localdomain (TNS V1-V3)

*** SERVICE NAME:() 2009-06-02 10:50:22.287
*** SESSION ID:(159.3) 2009-06-02 10:50:22.287
Thread 1 checkpoint: logseq 3, block 2, scn 502677
cache-low rba: logseq 3, block 3
on-disk rba: logseq 3, block 240, scn 502967
start recovery at logseq 3, block 3, scn 0
----- Redo read statistics for thread 1 -----
Read rate (ASYNC): 118Kb in 0.80s => 0.14 Mb/sec
Total physical reads: 4096Kb
Longest record: 8Kb, moves: 0/210 (0%)
Longest LWN: 9Kb, moves: 0/69 (0%), moved: 0Mb
Last redo scn: 0x0000.0007acb6 (502966)
----------------------------------------------
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 69/69 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 591/660 = 0.9
----------------------------------------------
*** 2009-06-02 10:50:23.123
KCRA: start recovery claims for 69 data blocks
*** 2009-06-02 10:50:24.019
KCRA: blocks processed = 69/69, claimed = 69, eliminated = 0
*** 2009-06-02 10:50:24.021
Recovery of Online Redo Log: Thread 1 Group 2 Seq 3 Reading mem 0
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 69/69 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 660/660 = 1.0
----------------------------------------------
*** 2009-06-02 11:16:11.328
Start dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32
buffer tsn: 4 rdba: 0x01000020 (4/32)
scn: 0x0000.0006bfdb seq: 0x10 flg: 0x06 tail: 0xbfdb0610
frmt: 0x02 chkval: 0x28a0 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB7220E00 to 0xB7222E00
B7220E00 0000A206 01000020 0006BFDB 06100000 [.... ...........]
B7220E10 000028A0 00180001 0000C7CC 0006BFD9 [.(..............]
B7220E20 1FE80000 00321F02 01000019 00110003 [......2.........]
B7220E30 000000F2 00805794 004900C8 0000200E [.....W....I.. ..]
B7220E40 0006BFDB 00000000 00000000 00000000 [................]
B7220E50 00000000 00000000 00000000 00000000 [................]
B7220E60 00000000 000E0100 002EFFFF 1D331D61 [............a.3.]
B7220E70 00001D33 1F72000E 1F1C1F47 1EC61EF3 [3.....r.G.......]
B7220E80 1E741E9D 1E261E4C 1DD51DFB 1D881DAF [..t.L.&.........]
B7220E90 00001D61 00000000 00000000 00000000 [a...............]
B7220EA0 00000000 00000000 00000000 00000000 [................]
Repeat 465 times
B7222BC0 00000000 08012C00 2350C203 4C494D06 [.....,....P#.MIL]
B7222BD0 0552454C 52454C43 4EC2034B B6770753 [LER.CLERK..NS.w.]
B7222BE0 01011701 0EC20201 0BC102FF 0308012C [............,...]
B7222BF0 040350C2 44524146 414E4107 5453594C [.P..FARD.ANALYST]
B7222C00 434CC203 0CB57707 01010103 FF1FC202 [..LC.w..........]
B7222C10 2C15C102 C2020801 414A0550 0553454D [...,....P.JAMES.]
B7222C20 52454C43 4DC2034B B5770763 0101030C [CLERK..Mc.w.....]
B7222C30 0AC20301 C102FF33 08012C1F 4D4FC203 [....3....,....OM]
B7222C40 41444105 4305534D 4B52454C 594EC203 [.ADAMS.CLERK..NY]
B7222C50 05BB7707 01010117 FF0CC202 2C15C102 [.w.............,]
B7222C60 C2030801 54062D4F 454E5255 41530852 [....O-.TURNER.SA]
B7222C70 4D53454C C2034E41 7707634D 010809B5 [LESMAN..Mc.w....]
B7222C80 C2020101 02800110 012C1FC1 4FC20308 [..........,....O]
B7222C90 494B0428 5009474E 49534552 544E4544 [(.KING.PRESIDENT]
B7222CA0 B57707FF 0101110B 33C20201 0BC102FF [..w........3....]
B7222CB0 0308012C 05594EC2 544F4353 4E410754 [,....NY.SCOTT.AN]
B7222CC0 53594C41 4CC20354 BB770743 01011304 [ALYST..LC.w.....]
B7222CD0 1FC20201 15C102FF 0308012C 05534EC2 [........,....NS.]
B7222CE0 52414C43 414D074B 4547414E 4FC20352 [CLARK.MANAGER..O]
B7222CF0 B5770728 01010906 19C20301 C102FF33 [(.w.........3...]
B7222D00 08012C0B 634DC203 414C4205 4D07454B [.,....Mc.BLAKE.M]
B7222D10 47414E41 C2035245 7707284F 010105B5 [ANAGER..O(.w....]
B7222D20 C2030101 02FF331D 012C1FC1 4DC20308 [.....3....,....M]
B7222D30 414D0637 4E495452 4C415308 414D5345 [7.MARTIN.SALESMA]
B7222D40 4DC2034E B5770763 01011C09 0DC20301 [N..Mc.w.........]
B7222D50 0FC20233 2C1FC102 C2030801 4A05434C [3......,....LC.J]
B7222D60 53454E4F 4E414D07 52454741 284FC203 [ONES.MANAGER..O(]
B7222D70 04B57707 01010102 4C1EC203 15C102FF [.w.........L....]
B7222D80 0308012C 04164CC2 44524157 4C415308 [,....L..WARD.SAL]
B7222D90 414D5345 4DC2034E B5770763 01011602 [ESMAN..Mc.w.....]
B7222DA0 0DC20301 06C20233 2C1FC102 C2030801 [....3......,....]
B7222DB0 4105644B 4E454C4C 4C415308 414D5345 [Kd.ALLEN.SALESMA]
B7222DC0 4DC2034E B5770763 01011402 11C20201 [N..Mc.w.........]
B7222DD0 0204C202 012C1FC1 4AC20308 4D530546 [......,....JF.SM]
B7222DE0 05485449 52454C43 50C2034B B4770703 [ITH.CLERK..P..w.]
B7222DF0 0101110C 09C20201 15C102FF BFDB0610 [................]
Block header dump: 0x01000020
Object id on Block? Y
seg/obj: 0xc7cc csc: 0x00.6bfd9 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000019 ver: 0x01 opc: 0
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0003.011.000000f2 0x00805794.00c8.49 --U- 14 fsc 0x0000.0006bfdb
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000

data_block_dump,data header at 0xb7220e64
===============
tsiz: 0x1f98
hsiz: 0x2e
pbl: 0xb7220e64
bdba: 0x01000020
76543210
flag=--------
ntab=1
nrow=14
frre=-1
fsbo=0x2e
fseo=0x1d61
avsp=0x1d33
tosp=0x1d33
0xe:pti[0] nrow=14 offs=0
0x12:pri[0] offs=0x1f72
0x14:pri[1] offs=0x1f47
0x16:pri[2] offs=0x1f1c
0x18:pri[3] offs=0x1ef3
0x1a:pri[4] offs=0x1ec6
0x1c:pri[5] offs=0x1e9d
0x1e:pri[6] offs=0x1e74
0x20:pri[7] offs=0x1e4c
0x22:pri[8] offs=0x1e26
0x24:pri[9] offs=0x1dfb
0x26:pri[10] offs=0x1dd5
0x28:pri[11] offs=0x1daf
0x2a:pri[12] offs=0x1d88
0x2c:pri[13] offs=0x1d61
block_row_dump:
tab 0, row 0, @0x1f72
tl: 38 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4a 46
col 1: [ 5] 53 4d 49 54 48
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 50 03
col 4: [ 7] 77 b4 0c 11 01 01 01
col 5: [ 2] c2 09
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 1, @0x1f47
tl: 43 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4b 64
col 1: [ 5] 41 4c 4c 45 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 14 01 01 01
col 5: [ 2] c2 11
col 6: [ 2] c2 04
col 7: [ 2] c1 1f
tab 0, row 2, @0x1f1c
tl: 43 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4c 16
col 1: [ 4] 57 41 52 44
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 16 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 06
col 7: [ 2] c1 1f
tab 0, row 3, @0x1ef3
tl: 41 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4c 43
col 1: [ 5] 4a 4f 4e 45 53
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 04 02 01 01 01
col 5: [ 3] c2 1e 4c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 4, @0x1ec6
tl: 45 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4d 37
col 1: [ 6] 4d 41 52 54 49 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 1c 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 0f
col 7: [ 2] c1 1f
tab 0, row 5, @0x1e9d
tl: 41 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4d 63
col 1: [ 5] 42 4c 41 4b 45
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 05 01 01 01 01
col 5: [ 3] c2 1d 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 6, @0x1e74
tl: 41 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4e 53
col 1: [ 5] 43 4c 41 52 4b
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 06 09 01 01 01
col 5: [ 3] c2 19 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 7, @0x1e4c
tl: 40 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4e 59
col 1: [ 5] 53 43 4f 54 54
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: [ 3] c2 4c 43
col 4: [ 7] 77 bb 04 13 01 01 01
col 5: [ 2] c2 1f
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 8, @0x1e26
tl: 38 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4f 28
col 1: [ 4] 4b 49 4e 47
col 2: [ 9] 50 52 45 53 49 44 45 4e 54
col 3: *NULL*
col 4: [ 7] 77 b5 0b 11 01 01 01
col 5: [ 2] c2 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 9, @0x1dfb
tl: 43 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4f 2d
col 1: [ 6] 54 55 52 4e 45 52
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 08 01 01 01
col 5: [ 2] c2 10
col 6: [ 1] 80
col 7: [ 2] c1 1f
tab 0, row 10, @0x1dd5
tl: 38 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 4f 4d
col 1: [ 5] 41 44 41 4d 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 59
col 4: [ 7] 77 bb 05 17 01 01 01
col 5: [ 2] c2 0c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 11, @0x1daf
tl: 38 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 2] c2 50
col 1: [ 5] 4a 41 4d 45 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 0c 03 01 01 01
col 5: [ 3] c2 0a 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 12, @0x1d88
tl: 39 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 50 03
col 1: [ 4] 46 41 52 44
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: [ 3] c2 4c 43
col 4: [ 7] 77 b5 0c 03 01 01 01
col 5: [ 2] c2 1f
col 6: *NULL*
col 7: [ 2] c1 15

tab 0, row 13, @0x1d61
tl: 39 fb: --H-FL-- lb: 0x1 cc: 8
col 0: [ 3] c2 50 23
col 1: [ 6] 4d 49 4c 4c 45 52
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 53
col 4: [ 7] 77 b6 01 17 01 01 01
col 5: [ 2] c2 0e
col 6: *NULL*
col 7: [ 2] c1 0b
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32

Убили-и!!
SQL> delete from scott.emp where ename='FARD';
1 row deleted.

SQL> commit;
Commit complete.

Смотрим опять дамп блока файла
SQL> alter system dump datafile 4 block 32;
System altered.



*** 2009-06-02 11:33:18.294
Start dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32
buffer tsn: 4 rdba: 0x01000020 (4/32)
scn: 0x0000.0008064a seq: 0x02 flg: 0x02 tail: 0x064a0602
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB7220E00 to 0xB7222E00
B7220E00 0000A206 01000020 0008064A 02020000 [.... ...J.......]
B7220E10 00000000 00180001 0000C7CC 00080648 [............H...]
B7220E20 1FE80000 00321F02 01000019 00110003 [......2.........]
B7220E30 000000F2 00805794 004900C8 00008000 [.....W....I.....]
B7220E40 0006BFDB 001D0001 000000CA 00800212 [................]
B7220E50 001E00A3 00252001 0008064A 00000000 [..... %.J.......]
B7220E60 00000000 000E0100 002EFFFF 1D331D61 [............a.3.]
B7220E70 00001D5A 1F72000E 1F1C1F47 1EC61EF3 [Z.....r.G.......]
B7220E80 1E741E9D 1E261E4C 1DD51DFB 1D881DAF [..t.L.&.........]
B7220E90 00001D61 00000000 00000000 00000000 [a...............]
B7220EA0 00000000 00000000 00000000 00000000 [................]
Repeat 465 times
B7222BC0 00000000 08002C00 2350C203 4C494D06 [.....,....P#.MIL]
B7222BD0 0552454C 52454C43 4EC2034B B6770753 [LER.CLERK..NS.w.]
B7222BE0 01011701 0EC20201 0BC102FF 0308023C [............<...]
B7222BF0 040350C2 44524146 414E4107 5453594C [.P..FARD.ANALYST]
B7222C00 434CC203 0CB57707 01010103 FF1FC202 [..LC.w..........]
B7222C10 2C15C102 C2020800 414A0550 0553454D [...,....P.JAMES.]
B7222C20 52454C43 4DC2034B B5770763 0101030C [CLERK..Mc.w.....]
B7222C30 0AC20301 C102FF33 08002C1F 4D4FC203 [....3....,....OM]
B7222C40 41444105 4305534D 4B52454C 594EC203 [.ADAMS.CLERK..NY]
B7222C50 05BB7707 01010117 FF0CC202 2C15C102 [.w.............,]
B7222C60 C2030800 54062D4F 454E5255 41530852 [....O-.TURNER.SA]
B7222C70 4D53454C C2034E41 7707634D 010809B5 [LESMAN..Mc.w....]
B7222C80 C2020101 02800110 002C1FC1 4FC20308 [..........,....O]
B7222C90 494B0428 5009474E 49534552 544E4544 [(.KING.PRESIDENT]
B7222CA0 B57707FF 0101110B 33C20201 0BC102FF [..w........3....]
B7222CB0 0308002C 05594EC2 544F4353 4E410754 [,....NY.SCOTT.AN]
B7222CC0 53594C41 4CC20354 BB770743 01011304 [ALYST..LC.w.....]
B7222CD0 1FC20201 15C102FF 0308002C 05534EC2 [........,....NS.]
B7222CE0 52414C43 414D074B 4547414E 4FC20352 [CLARK.MANAGER..O]
B7222CF0 B5770728 01010906 19C20301 C102FF33 [(.w.........3...]
B7222D00 08002C0B 634DC203 414C4205 4D07454B [.,....Mc.BLAKE.M]
B7222D10 47414E41 C2035245 7707284F 010105B5 [ANAGER..O(.w....]
B7222D20 C2030101 02FF331D 002C1FC1 4DC20308 [.....3....,....M]
B7222D30 414D0637 4E495452 4C415308 414D5345 [7.MARTIN.SALESMA]
B7222D40 4DC2034E B5770763 01011C09 0DC20301 [N..Mc.w.........]
B7222D50 0FC20233 2C1FC102 C2030800 4A05434C [3......,....LC.J]
B7222D60 53454E4F 4E414D07 52454741 284FC203 [ONES.MANAGER..O(]
B7222D70 04B57707 01010102 4C1EC203 15C102FF [.w.........L....]
B7222D80 0308002C 04164CC2 44524157 4C415308 [,....L..WARD.SAL]
B7222D90 414D5345 4DC2034E B5770763 01011602 [ESMAN..Mc.w.....]
B7222DA0 0DC20301 06C20233 2C1FC102 C2030800 [....3......,....]
B7222DB0 4105644B 4E454C4C 4C415308 414D5345 [Kd.ALLEN.SALESMA]
B7222DC0 4DC2034E B5770763 01011402 11C20201 [N..Mc.w.........]
B7222DD0 0204C202 002C1FC1 4AC20308 4D530546 [......,....JF.SM]
B7222DE0 05485449 52454C43 50C2034B B4770703 [ITH.CLERK..P..w.]
B7222DF0 0101110C 09C20201 15C102FF 064A0602 [..............J.]
Block header dump: 0x01000020
Object id on Block? Y
seg/obj: 0xc7cc csc: 0x00.80648 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000019 ver: 0x01 opc: 0
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0003.011.000000f2 0x00805794.00c8.49 C--- 0 scn 0x0000.0006bfdb
0x02 0x0001.01d.000000ca 0x00800212.00a3.1e --U- 1 fsc 0x0025.0008064a

data_block_dump,data header at 0xb7220e64
===============
tsiz: 0x1f98
hsiz: 0x2e
pbl: 0xb7220e64
bdba: 0x01000020
76543210
flag=--------
ntab=1
nrow=14
frre=-1
fsbo=0x2e
fseo=0x1d61
avsp=0x1d33
tosp=0x1d5a
0xe:pti[0] nrow=14 offs=0
0x12:pri[0] offs=0x1f72
0x14:pri[1] offs=0x1f47
0x16:pri[2] offs=0x1f1c
0x18:pri[3] offs=0x1ef3
0x1a:pri[4] offs=0x1ec6
0x1c:pri[5] offs=0x1e9d
0x1e:pri[6] offs=0x1e74
0x20:pri[7] offs=0x1e4c
0x22:pri[8] offs=0x1e26
0x24:pri[9] offs=0x1dfb
0x26:pri[10] offs=0x1dd5
0x28:pri[11] offs=0x1daf
0x2a:pri[12] offs=0x1d88
0x2c:pri[13] offs=0x1d61
block_row_dump:
tab 0, row 0, @0x1f72
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4a 46
col 1: [ 5] 53 4d 49 54 48
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 50 03
col 4: [ 7] 77 b4 0c 11 01 01 01
col 5: [ 2] c2 09
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 1, @0x1f47
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4b 64
col 1: [ 5] 41 4c 4c 45 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 14 01 01 01
col 5: [ 2] c2 11
col 6: [ 2] c2 04
col 7: [ 2] c1 1f
tab 0, row 2, @0x1f1c
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4c 16
col 1: [ 4] 57 41 52 44
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 02 16 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 06
col 7: [ 2] c1 1f
tab 0, row 3, @0x1ef3
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4c 43
col 1: [ 5] 4a 4f 4e 45 53
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 04 02 01 01 01
col 5: [ 3] c2 1e 4c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 4, @0x1ec6
tl: 45 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4d 37
col 1: [ 6] 4d 41 52 54 49 4e
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 1c 01 01 01
col 5: [ 3] c2 0d 33
col 6: [ 2] c2 0f
col 7: [ 2] c1 1f
tab 0, row 5, @0x1e9d
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4d 63
col 1: [ 5] 42 4c 41 4b 45
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 05 01 01 01 01
col 5: [ 3] c2 1d 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 6, @0x1e74
tl: 41 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4e 53
col 1: [ 5] 43 4c 41 52 4b
col 2: [ 7] 4d 41 4e 41 47 45 52
col 3: [ 3] c2 4f 28
col 4: [ 7] 77 b5 06 09 01 01 01
col 5: [ 3] c2 19 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 7, @0x1e4c
tl: 40 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4e 59
col 1: [ 5] 53 43 4f 54 54
col 2: [ 7] 41 4e 41 4c 59 53 54
col 3: [ 3] c2 4c 43
col 4: [ 7] 77 bb 04 13 01 01 01
col 5: [ 2] c2 1f
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 8, @0x1e26
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4f 28
col 1: [ 4] 4b 49 4e 47
col 2: [ 9] 50 52 45 53 49 44 45 4e 54
col 3: *NULL*
col 4: [ 7] 77 b5 0b 11 01 01 01
col 5: [ 2] c2 33
col 6: *NULL*
col 7: [ 2] c1 0b
tab 0, row 9, @0x1dfb
tl: 43 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4f 2d
col 1: [ 6] 54 55 52 4e 45 52
col 2: [ 8] 53 41 4c 45 53 4d 41 4e
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 09 08 01 01 01
col 5: [ 2] c2 10
col 6: [ 1] 80
col 7: [ 2] c1 1f
tab 0, row 10, @0x1dd5
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 4f 4d
col 1: [ 5] 41 44 41 4d 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 59
col 4: [ 7] 77 bb 05 17 01 01 01
col 5: [ 2] c2 0c
col 6: *NULL*
col 7: [ 2] c1 15
tab 0, row 11, @0x1daf
tl: 38 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 2] c2 50
col 1: [ 5] 4a 41 4d 45 53
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4d 63
col 4: [ 7] 77 b5 0c 03 01 01 01
col 5: [ 3] c2 0a 33
col 6: *NULL*
col 7: [ 2] c1 1f
tab 0, row 12, @0x1d88
tl: 2 fb: --HDFL-- lb: 0x2

tab 0, row 13, @0x1d61
tl: 39 fb: --H-FL-- lb: 0x0 cc: 8
col 0: [ 3] c2 50 23
col 1: [ 6] 4d 49 4c 4c 45 52
col 2: [ 5] 43 4c 45 52 4b
col 3: [ 3] c2 4e 53
col 4: [ 7] 77 b6 01 17 01 01 01
col 5: [ 2] c2 0e
col 6: *NULL*
col 7: [ 2] c1 0b
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 32 maxblk 32


Берем дамп со смещением в начало блока.
BBED> dump /v dba 4,32 offset 7652 count 64
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7652 to 7715 Dba:0x01000020
-------------------------------------------------------
0102c20e ff02c10b 3c020803 c2500304 l .. ... .<... P..
46415244 07414e41 4c595354 03c24c43 l FARD.ANALYST. LC
0777b50c 03010101 02c21fff 02c1152c l .w ...... ... .,
000802c2 50054a41 4d455305 434c4552 l ... P.JAMES.CLER
<16 bytes per line>

По дампу мы видим что строка 12 со смещением от начала блока @0x1d88. Смотрим с чего начинается строка.
BBED> p *kdbr[12]
rowdata[39]
-----------
ub1 rowdata[39] @7660 0x3c

Ну это я привел дамп на начало строки.
BBED> dump /v dba 4,32 offset 7660 count 64
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7660 to 7723 Dba:0x01000020
-------------------------------------------------------
3c020803 c2500304 46415244 07414e41 l <... P..FARD.ANA
4c595354 03c24c43 0777b50c 03010101 l LYST. LC.w .....
02c21fff 02c1152c 000802c2 50054a41 l . ... .,... P.JA
4d455305 434c4552 4b03c24d 630777b5 l MES.CLERK. Mc.w
<16 bytes per line>

Надо бы разобраться подробнее почему вычесть 16(десятичн) нужно от значения 1 байта строки. Пока возьму как аксиому.
BBED> modify /x 2c offset 7660
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7660 to 7723 Dba:0x01000020
------------------------------------------------------------------------
2c020803 c2500304 46415244 07414e41 4c595354 03c24c43 0777b50c 03010101
02c21fff 02c1152c 000802c2 50054a41 4d455305 434c4552 4b03c24d 630777b5
<32 bytes per line>

Для наглядности смотрим чего произошло.
BBED> dump /v dba 4,32 offset 7660 count 64
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 32 Offsets: 7660 to 7723 Dba:0x01000020
-------------------------------------------------------
2c020803 c2500304 46415244 07414e41 l ,... P..FARD.ANA
4c595354 03c24c43 0777b50c 03010101 l LYST. LC.w .....
02c21fff 02c1152c 000802c2 50054a41 l . ... .,... P.JA
4d455305 434c4552 4b03c24d 630777b5 l MES.CLERK. Mc.w
<16 bytes per line>

Правим контрольную сумму.
BBED> sum dba 4,32
Check value for File 4, Block 32:
current = 0x16d8, required = 0x16c8

BBED> sum dba 4,32 apply
Check value for File 4, Block 32:
current = 0x16c8, required = 0x16c8


Сбрасываем буфер.
SQL> alter system flush buffer_cache;
System altered.

Проверяем что у нас все вернулось.
SQL> select * from scott.emp where ename='FARD';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FARD ANALYST 7566 03-DEC-81 3000
20

SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
7566 JONES MANAGER 7839 02-APR-81 2975
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
7902 FARD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.



Блин какой я умный. Пойду попью пивка.

вторник, мая 26, 2009

Ковыряем BBED. Block Browser and EDitor. Часть 1

Для Linux програмка есть в поставке, но в разобраном виде. Поэтому выполняем следующие действия

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

Имеет смысл скопировать bbed в каталог $ORACLE_HOME/bin. После запуска программки требуется ввод пароля. Для RedHat4 и Oracle10 пароль по умолчанию "blockedit".

[oracle@localhost lib]$ bbed
Password:

BBED: Release 2.0.0.0.0 - Limited Production on Sat May 23 20:30:31 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************



Команды:
help all - я бы сказал очень краткая помощь

BBED> help all
SET DBA [ dba | file#, block# ]
SET FILENAME 'filename'
SET FILE file#
SET BLOCK [+/-]block#
SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
SET BLOCKSIZE bytes
SET LIST[FILE] 'filename'
SET WIDTH character_count
SET COUNT bytes_to_display
SET IBASE [ HEX | OCT | DEC ]
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ]
SET SPOOL [ Y | N ]
SHOW [ | ALL ]
INFO
MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]
DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]
PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
EXAMINE[/Nuf] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
:
N - a number which specifies a repeat count.
u - a letter which specifies a unit size:
b - b1, ub1 (byte)
h - b2, ub2 (half-word)
w - b4, ub4(word)
r - Oracle table/index row
f - a letter which specifies a display format:
x - hexadecimal
d - decimal
u - unsigned decimal
o - octal
c - character (native)
n - Oracle number
t - Oracle date
i - Oracle rowid
FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
MODIFY[/x|d|u|o|c] numeric/character string
[ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
ASSIGN[/x|d|u|o] =
: [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
: [ value | ]
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
POP [ALL]
REVERT [ DBA | FILE | FILENAME | BLOCK ]
UNDO
HELP [ | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]

show - показывает текущие настройки. Какой файл данных смотрим, размер блока, где располагается список файлов данных и т.д.

BBED> show
FILE# 0
BLOCK# 1
OFFSET 0
DBA 0x00000000 (0 0,1)
FILENAME
BIFILE bifile.bbd
LISTFILE
BLOCKSIZE 8192
MODE Browse
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

BLOCKSIZE - Размер стандартного блока в байтах.
MODE - Режим запуска программы (browse or edit)
SILENT - Suppreses output to standart out (Y or N)
SPOOL - Spools output to bbed.log file (Y or N)
LISTFILE - Список датафайлов для редактирования
CMDFILE - Имя файла со списком команд для выполнения
BIFILE - Filename of before-image file (undo) file. Default name is bifile.bbd
LOGFILE - Filename of user logfile. Default name is log.bbd
PARFILE - Parameter file with above option listed. Почему-то я не наше этого параметря в Oracle10. Поэтому настройки менял вручную.

Если присмотреться к листингу предудщей команды и текущей, то нетрудно догадаться
что выполнение команды SET DBA приведет к изменению параметра DBA в команде show.
к примеру:
выполнение команды set file 2 приведет к ошибке. И действительно если посмотреть на листинг команды show увидим что параметр LISTFILE пустой.

BBED> set file 2
BBED-00312: no LISTFILE specified

Исправить это можно выполнив следующие действия. Запрос к базе
SQL> select file#||' '||name||' '||bytes from v$datafile;
FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------1 /home/oracle/oracle/product/10.2.0/oradata/pahom/system01.dbf 503316480
2 /home/oracle/oracle/product/10.2.0/oradata/pahom/undotbs01.dbf 36700160
3 /home/oracle/oracle/product/10.2.0/oradata/pahom/sysaux01.dbf 251658240
4 /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf 5242880
5 /home/oracle/oracle/product/10.2.0/oradata/pahom/example01.dbf 104857600

Результат выполнения сохраним в файле /home/oracle/oracle/product/10.2.0/bbed/fileunix.log

И выполним команду
BBED> set list '/home/oracle/oracle/product/10.2.0/bbed/fileunix.log'
LISTFILE /home/oracle/oracle/product/10.2.0/bbed/fileunix.log
Теперь запрос на установку параметра set file 2 выполнится.
BBED> set file 2
FILE# 2

Изучив новый листинг команды show, заметим что текущие значения FILENAME, FILE#, DBA, LISTFILE изменились.
BBED> show
FILE# 2
BLOCK# 1
OFFSET 0
DBA 0x00800001 (8388609 2,1)
FILENAME /home/oracle/oracle/product/10.2.0/oradata/pahom/undotbs01.dbf
BIFILE bifile.bbd
LISTFILE /home/oracle/oracle/product/10.2.0/bbed/fileunix.log
BLOCKSIZE 8192
MODE Browse
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

info - показывает список датафайлов.
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /home/oracle/oracle/product/10.2.0/oradata/pahom/system01. 61440
2 /home/oracle/oracle/product/10.2.0/oradata/pahom/undotbs01 4480
3 /home/oracle/oracle/product/10.2.0/oradata/pahom/sysaux01. 30720
4 /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.d 640
5 /home/oracle/oracle/product/10.2.0/oradata/pahom/example01 12800

Конечно если указал файл с этим списком. Иначе получим результат:
BBED> info
File# Name Size(blks)
----- ---- ----------

set dba - Data Block Address. set dba "file_id","block"

set filename - Указываем имя текущего обрабатываемого датафайла

set file - Указываем file_id текущего обрабатываемого датафайла

set block - Указываем текущий блок данных обрабатываемого датафайла. Возможно использование set block +16. Если текущий блок 16, то после этой команды текущим станет 32 блок.

set offset - Незнакомое мне понятие. Кажется относительная ссылка в блоке(в байтах). Описание аналогично set block

set width - Ширина экрана. По умолчанию 80 символов

set count - Количество байт выводимых при команде dump. По умолчанию 512.

set ibase - Формат чисел используемый при работе с BBED. По умолчанию decimal (hexadecimal or octal)

map - The map command shows a map of the current block.
Structure/Element Description
Struct kcbh, 20 bytes ==Block Header Structure
ub1 type_kcbh ==Block type (see Header Block Types
below)
ub1 frmt_kcbh ==Block format 1=Oracle7, 2=Oracle8+
ub1 spare1_kcbh ==Not used
ub1 spare2_kcbh ==Not used
ub4 rdba_kcbh ==RDBA – Relative Data Block Address
ub4 bas_kcbh ==SCN Base
ub2 wrp_kcbh ==SCN Wrap
ub1 seq_kcbh ==Sequence number, incremented for every change made
to the bock at the same SCN
ub1 flg_kcbh ==Flag: 0x01 New block
0x02 delayed Logging Change advanced SCN/seq
0x04 Check value saved – block XOR’s to zero
0x08 Temporary block
ub2 chkval_kcbh ==Optional block checksum ( if DB_BLOCK_CHECKSUM=TRUE)
ub2 spare3_kcbh ==Not used
struct ktbbh, 72 bytes ==Transaction Fixed Header Structure
ub1 ktbbhtyp ==Block type (1=DATA, 2=INDEX)
union ktbbhsid, 4 bytes ==Segment/Object ID
struct ktbbhcsc, 8 bytes ==SCN at last block cleanout
b2 ktbbhict ==Number of ITL slots
ub1 ktbbhflg ==0=on the freelist
ub1 ktbbhfsl ==ITL TX freelist slot
ub4 ktbbhfnx ==DBA of next block on the freelist
struct ktbbhitl[2], 48 bytes ==ITL list index
struct kdbh, 14 bytes ==Data Header Structure
ub1 kdbhflag ==N=pctfree hit(clusters); F=do not put on freelist;
K=flushable cluster keys
b1 kdbhntab ==Number of tables (>1 in clusters)
b2 kdbhnrow ==Number of rows
sb2 kdbhfrre ==First free row entry index; -1=you have to add one
sb2 kdbhfsbo ==Freespace begin offset
sb2 kdbhfseo ==Freespace end offset
b2 kdbhavsp ==Available space in the block
b2 kdbhtops ==Total available space when all TXs commit
struct kdbt[1], 4 bytes ==Table Directory Entry Structure
b2 kdbtofs
b2 kdbtnrow
sb2 kdbr[1] ==Row Directory
ub1 freespace[8030] ==Free Space
ub1 rowdata[38] ==Row Data
ub4 tailchk ==(See Tailchecks below)

Header Block Types
ID Type
01 Undo segment header
02 Undo data block
03 Save undo header
04 Save undo data block
05 Data segment header(temp,index,data and so on)
06 KTB managed data block (with ITL)
07 Temp table data block (no ITL)
08 Sort Key
09 Sort Run
10 Segment free list block
11 Data file header


Cache Layer Block Types

This is a list of the block type numbers found in cache layer block headers.

Code= Block Type= Versions
1= Undo header block (limited extents)= all, but superseded by type 14 from 8.0
2= Undo data block= all
3= Save undo header block (limited extents)= all, but superseded by type 15 from 8.0
4= Save undo data block= all
5= Data segment header block (limited extents, no freelist groups)= all, but superseded by type 16 from 8.0
6= Table/cluster/index segment data block= all
7= Temporary segment data block= all
8= Sort key block= all
9= Sort run block= all
10= Free list block= all, but superseded by type 22 from 8.0
11= Data file header block= all
12= Data segment header block (limited extents, with freelist groups)= all, but superseded by type 17 from 8.0
13= Compatibility segment= all
14= Undo header block (unlimited extents)= from 7.3
15= Save undo header block (unlimited extents)= from 7.3
16= Data segment header block (unlimited extents, no freelist groups)= from 7.3
17= Data segment header block (unlimited extents, with freelist groups)= from 7.3
18= Extent map block= from 7.3
19= Backup set piece header= from 8.0
20= Backup set directory block= from 8.0
21= Controlfile block= from 8.0
22= Free list block with free block count= from 8.0
23= LOB segment header block= from 8.0
24= LOB segment freelist block= from 8.0
25= LOB segment space usage index block= from 8.0
26= LOB segment space usage bitmap block= from 8.0
27= LOB segment chunk data block= from 8.0
28= don't know
29= LMT space map header block= from 8.1
30= LMT space map block= from 8.1
31= don't know
32= ASSM level 1 bitmap block= from 9.0
33= ASSM level 2 bitmap block= from 9.0
34= ASSM level 3 bitmap block= from 9.0
35= ASSM segment header block= from 9.0
36= ASSM extent map block= from 9.0
37= don't know
38= System managed undo header block= from 9.0




Tailchecks
SCN base Type SCN seq
9728 06 02
A tail check of 0x97280602 stored on an Intel machine would be written to disk as "02062897".

BBED> map dba 4,12
File: /home/oracle/oracle/product/10.2.0/oradata/pahom/users01.dbf (4)
Block: 12 Dba:0x0100000c
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 72 bytes @20
struct kdbh, 14 bytes @100
struct kdbt[0], 0 bytes @114
sb2 kdbr[0] @114
ub1 freespace[8074] @114
ub1 rowdata[0] @8188
ub4 tailchk @8188


(d)ump -The dump command dumps the content of the block to the screen. It can be combinet with the /v option to produce a more verbose output.
Описание первых 16 байтов блока
06020000 0с00с001 16830300 00000104
Type Format Unused RDBA SCN Base SCN Wrap Seq Flag
06 02 0000 0c00c001 16830300 0000 01 04

(p)rint - Насколько понял печатает содержимое описания блока. Описание формата вывода
Unit Size* | Name | Offset | Value

BBED> p tailchk
ub4 tailchk @8188 0xbfdb0601

BBED> p kcbh
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub1 spare1_kcbh @2 0x00
ub1 spare2_kcbh @3 0x00
ub4 rdba_kcbh @4 0x0100000c
ub4 bas_kcbh @8 0x0006bfdb
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01
ub1 flg_kcbh @15 0x04 (KCBHFCKV)
ub2 chkval_kcbh @16 0x38aa
ub2 spare3_kcbh @18 0x0000

BBED> p offset 16
kcbh.chkval_kcbh
ub2 chkval_kcbh @16 0x38aa

Switch Display Format
/x Hex
/d signed decimal
/u uncigned decimal
/o Octal
/c Character
/n Oracle Number
/t Oracle Date
/i Oracle ROWID

BBED> p /c offset 14 - получим в поле Value “.” вместо 0x01


e(x)amine - Надо разобраться. Чего-то там проверяет. Не совсем понятна строка BBED> x /rcnn


(f)ind - Поиск в блоке. Поиск можно задавать в различных типах данных
/x Hexadecimal
/d Decimal
/u unsigned decimal
/o Octal
/c character (native)
Если использовать TOP то поиск начинается с начала блока (offset 0)
BBED> find /c ar TOP -поиск строки “ar” в текущем блоке. Начиная с начала блока.


copy - Копирование содержимого блока в другой блок.
BBED> copy dba 2,16 to dba 1,16


(m)odify - Изменение данных в блоке. Начиная с 8170 байта
BBED> modify /c Eisen dba 7,16 offset 8170


assign - The assign command does symbolic assignment, with type and range checking. Eithen target or source can be omitted for the current offset. Exemple assign structure at current offset to file 4, block 2’s first ITL entry
BBED> assign dba 4,2 ktbbhitl[0]


sum - The sum command is used to check and set the block checksum. The apply directive can be used to update the checksum. Example shows the block checksum of file 7, block 16 being checked and then updated.
BBED> sum dba 7, 16
Check value for File 7 Block 16:
Current = 0x02d1, required = 0x09da
BBED> sum dba 7, 16 apply
Check value for File 7 Block 16:
Current = 0x09da, required = 0x09da


push/pop - Записываем в память содержимое блока. Извлекаем из памяти в текущий блок.
BBED> push dba 7, 16
BBED> set dba 6, 1
BBED> pop


revert - The revert command is used to restore a file, filename, block or DBA to it’s original state when bbed was started.
BBED> revert dba 7, 16


undo - The undo command rolls back the last modify or assign command.


verify - The verify command is used to verify the integrity of the block. It performs a similar function to the "dbverify" utility.


corrupt - The corrupt command is used to mark blocks as media corrupt.
Note: The undo command does not undo a corruption. The revert command however does.

понедельник, мая 25, 2009

Делаем dump. Описание команд

Donald K. Burleson

Oracle Tips

How to tell Oracle to take a dump



It is often useful to dump the internal contents of Oracle internal structures such as the control files, library cache, and redo log headers. The following undocumented Oracle commands can be used for this purpose.



For each of these commands, a trace file will be generated in your UDUMP directory. After issuing the command, you can go to your UDUMP directory to view the contents of the dump.



1 – SCN Dump - This command dumps the control file contents to see SCN information. The SCN information is especially useful when doing a database recovery.



alter session set events
'immediate trace name CONTROLF level 10';





2 – File Header Dump - Here is the command to dump file headers. This dump is also quite useful if you have a corrupt database or a failure from rman in doing a database recovery.



alter session set events
'immediate trace name FILE_HDRS level 10';



3 - Dump redo log headers – This command will dump all of the redo log header information.



alter session set events
'immediate trace name REDOHDR level 10';



4 – System state dump – This command will dump the system state to your trace file.



alter session set events
'immediate trace name SYSTEMSTATE level 10';



5 – Process state dump – This command will dump the process state for all active processes in your database:



alter session set events
'immediate trace name PROCESSSTATE level 10';



6 – Library Cache Dump – This command is very useful for examining library Cache details, especially when you are having high library cache reloads or SQL access contention:





alter session set events
'immediate trace name library_cache level 10';



Here is a partial listing from this dump. As you can see, Oracle provides a wealth of detailed information about the internals of the library cache:



Dump file /u01/app/oracle/admin/testc1/udump/testc1_ora_16167.trc

Oracle8i Enterprise Edition Release 8.1.6.1.0 - 64bit Production

With the Partitioning option

JServer Release 8.1.6.1.0 - 64bit Production

ORACLE_HOME = /u01/app/oracle/product/8.1.6_64

System name: SunOS

Node name: sting

Release: 5.8

Version: Generic_108528-03

Machine: sun4u

Instance name: testc1

Redo thread mounted by this instance: 1

Oracle process number: 10

Unix process pid: 16167, image: oracle@sting (TNS V1-V3)



*** SESSION ID:(10.6858) 2001-07-05 10:29:17.148

LIBRARY CACHE STATISTICS:

gets hit ratio pins hit ratio reloads invalids namespace

---------- --------- ---------- --------- ---------- ---------- ---------

48475 0.9905518 273499 0.9975868 20 13 CRSR

5043 0.9569700 151734 0.9973045 0 0 TABL/PRCD/TYPE

4044 0.9943126 4051 0.9923476 0 0 BODY/TYBD

1 0.0000000 1 0.0000000 0 0 TRGR

29 0.0000000 29 0.0000000 0 0 INDX

вторник, апреля 28, 2009

Поднятие БД. Когда уже усе ...

Совет с www.sql.ru Не пробовал, но запомнить стоит.

-- Действия при падении системы (когда уже нечего не помогает ) Проверенно
-- set oracle_sid=oraSID
-- sqlplus "/ as sysdba"
-- sqlplus sys/sys@oraSID as sysdba
sqlplus sys/sys_password@oraSID as sysdba
-- create spfile from pfile;
-- монтируем диски
startup nomount;
-- отключаем все сегменты отката
alter system set "_corrupted_rollback_segments"='_SYSSMU1$','_SYSSMU2$','_SYSSMU3$','_SYSSMU4$','_SYSSMU5$','_SYSSMU6$','_SYSSMU7$','_SYSSMU8$','_SYSSMU9$','_SYSSMU10$' scope=spfile;
-- запускаем с недокументироваными параметрами
startup mount force;
-- удаляем фаел UNDO
alter database datafile 'C:\oracle\product\10.2.0\oradata\ora01d\UNDOTBS01.DBF' offline drop;
-- правим базу
recover database;
-- пытаемся открыть
alter database open;

среда, апреля 01, 2009

Зделаем wrap -у unwrap :)

Понадобилось мне как-то просмотреть wrap-ленную программку. Жадные разработчики хотели денешку за каждый чих, описания таблиц не дали. Но ведь МЫ скромные админы сами могем сделать отчет, а на каждый wrapper у нас есть свой болт с определенно насеченной резьбой. На тот момент я долго искать информацию как это зделать. Нашел капризную *.exe программу, которая ощасливила мое начальство.
Нооо! Есть путь более правильный. Сам Oracle нам в помощь. В моем случае это Oracle 10.
$ORACLE_HOME/rdbms/admin/diana.sql
$ORACLE_HOME/rdbms/admin/diutil.sql
$ORACLE_HOME/rdbms/admin/pipidl.sql – эти замечательные пакеты должны стоять в БД. Плюс процедурка дяди Пети Финнигана. До полного понимания чего происходит внутри мне еще ломать и ломать. Но того что проверено на первое время хватит. Да! источник информации вот тута.
create procedure unwrap_r(aname varchar2)
is
root sys.pidl.ptnod;
status sys.pidl.ub4;
--
procedure recurse (n sys.pidl.ptnod) is
--
seq sys.pidl.ptseqnd;
len integer;
--
begin
--
--dbms_output.put_line('Node :'||n);
--dbms_output.put_line('code (DEC) :'||pidl.ptkin(n));
--dbms_output.put_line('Node Type :'||pidl.ptattnnm(pidl.ptkin(n)));
--dbms_output.put_line('--');
if(pidl.ptkin(n) = diana.d_comp_u) then
recurse(diana.a_unit_b(n));
elsif (pidl.ptkin(n) = diana.d_s_body) then
dbms_output.put_line('CREATE OR REPLACE ');
recurse(diana.a_d_(n));
recurse(diana.a_header(n));
recurse(diana.a_block_(n));
dbms_output.put_line('END;');
dbms_output.put_line('/');
elsif(pidl.ptkin(n) = diana.di_proc) then
dbms_output.put_line('PROCEDURE '||diana.l_symrep(n));
elsif(pidl.ptkin(n) = diana.d_p_) then
recurse(diana.as_p_(n));
elsif(pidl.ptkin(n) = diana.ds_param) then
-- not implemented
null;
elsif(pidl.ptkin(n) = diana.d_block) then
dbms_output.put_line('IS ');
recurse(diana.as_item(n));
dbms_output.put_line('BEGIN');
recurse(diana.as_stm(n));
recurse(diana.as_alter(n));
elsif(pidl.ptkin(n) = diana.ds_item) then
-- not implemented
null;
elsif(pidl.ptkin(n) = diana.ds_stm) then
seq := diana.as_list(n);
len := pidl.ptslen(seq) - 1;
for i in 0..len loop
recurse(pidl.ptgend(seq,i));
end loop;
elsif(pidl.ptkin(n) = diana.d_null_s) then
dbms_output.put_line('NULL;');
elsif(pidl.ptkin(n) = diana.ds_alter) then
-- not implemented
null;
else
dbms_output.put_line('****ERROR*****');
end if;
--
end recurse;
--
begin

dbms_output.put_line('Start up');
sys.diutil.get_diana(
aname, NULL, NULL,
NULL, status, root,
1);

if (status <> sys.diutil.s_ok) then
sys.dbms_output.put_line('Error: couldn''t find diana; status: ' ||
to_char(status));
raise sys.diutil.e_subpNotFound;
end if;
--
-- recurse through the DIANA nodes
--
recurse(root);
--
end unwrap_r;

Остается только выполнить пару действий, которые каждый может сделать по своему.
SQL>set serveroutput on size 1000000
SQL>exec unwrap_r(‘’);
Вах! Получили результат

понедельник, марта 30, 2009

Хацкерам на заметку. С сайта www.cirt.net

Натолкнулся на перечень пользователей оракла с паролями по умолчанию. Бегом менять пароли. Хотя, проверил самого крутого пользователя dmsys и менее страшного outln которые были у меня в базе. Эти товарисчи заблокированны. Но чем черт не шутит.
1. Oracle
Product Internet Directory Service
User ID cn=orcladmin
Password welcome
2. Oracle
Product Oracle
User ID LBACSYS
Password LBACSYS
3. Oracle
Product Oracle
User ID OAS_PUBLIC
Password OAS_PUBLIC
4. Oracle
Product Oracle
User ID MXAGENT
Password MXAGENT
5. Oracle
Product Oracle
User ID MTS_USER
Password MTS_PASSWORD
6. Oracle
Product Oracle
User ID MASTER
Password PASSWORD
7. Oracle
Product Oracle
User ID LIBRARIAN
Password SHELVES
8. Oracle
Product Oracle
User ID IMEDIA
Password IMEDIA
9. Oracle
Product Oracle
User ID FROSTY
Password SNOWMAN
10. Oracle
Product Oracle
User ID ESTOREUSER
Password ESTORE
11. Oracle
Product Oracle
User ID EJSADMIN
Password EJSADMIN
12. Oracle
Product Oracle
User ID DES
Password DES
13. Oracle
Product Oracle
User ID DBI
Password MUMBLEFRATZ
14. Oracle
Product Oracle
User ID CQSCHEMAUSER
Password PASSWORD
15. Oracle
Product Oracle
User ID COMPIERE
Password COMPIERE
16. Oracle
Product Oracle
User ID ADMIN
Password WELCOME
Level Administrator
17. Oracle
Product Oracle
User ID CISINFO
Password CISINFO
18. Oracle
Product Oracle
User ID CIS
Password CIS
19. Oracle
Product Oracle
User ID CIDS
Password CIDS
20. Oracle
Product Oracle
User ID BC4J
Password BC4J
21. Oracle
Product Oracle
User ID AQ
Password AQ
22. Oracle
Product Oracle
User ID CENTRA
Password CENTRA
23. Oracle
Product Oracle
User ID ADMIN
Password JETSPEED
24. Oracle
Product Oracle
User ID ADAMS
Password WOOD
25. Oracle
Product Oracle
User ID ADLDEMO
Password ADLDEMO
26. Oracle
Product Oracle
User ID APPLSYS
Password FND
27. Oracle
Product Oracle
User ID APPLSYSPUB
Password FNDPUB
28. Oracle
Product Oracle
User ID APPS
Password APPS
29. Oracle
Product Oracle
User ID AQDEMO
Password AQDEMO
30. Oracle
Product Oracle
User ID AQJAVA
Password AQJAVA
31. Oracle
Product Oracle
User ID AQUSER
Password AQUSER
32. Oracle
Product Oracle
User ID AUDIOUSER
Password AUDIOUSER
33. Oracle
Product Oracle
User ID AURORA$JIS$UTILITY$
Password (none)
34. Oracle
Product Oracle
User ID AURORA$ORB$UNAUTHENTICATED
Password INVALID
35. Oracle
Product Oracle
User ID BLAKE
Password PAPER
36. Oracle
Product Oracle
User ID CATALOG
Password CATALOG
37. Oracle
Product Oracle
User ID CDEMO82
Password CDEMO82
38. Oracle
Product Oracle
User ID CDEMORID
Password CDEMORID
39. Oracle
Product Oracle
User ID CDEMOUCB
Password CDEMOUCB
40. Oracle
Product Oracle
User ID CLARK
Password CLOTH
41. Oracle
Product Oracle
User ID COMPANY
Password COMPANY
Notes All Privs
42. Oracle
Product Oracle
User ID CSMIG
Password CSMIG
43. Oracle
Product Oracle
User ID CTXDEMO
Password CTXDEMO
44. Oracle
Product Oracle
User ID CTXSYS
Password CTXSYS
45. Oracle
Product Oracle
User ID DBSNMP
Password DBSNMP
46. Oracle
Product Oracle
User ID MDSYS
Password MDSYS
Notes All Privileges with Admin
47. Oracle
Product Oracle
User ID DEMO9
Password DEMO9
48. Oracle
Product Oracle
User ID EMP
Password EMP
49. Oracle
Product Oracle
User ID EVENT
Password EVENT
50. Oracle
Product Oracle
User ID FINANCE
Password FINANCE
51. Oracle
Product Oracle
User ID FND
Password FND
52. Oracle
Product Oracle
User ID GPLD
Password GPLD
53. Oracle
Product Oracle
User ID GPFD
Password GPFD
54. Oracle
Product Oracle
User ID HLW
Password HLW
55. Oracle
Product Oracle
User ID HR
Password HR
56. Oracle
Product Oracle
User ID IMAGEUSER
Password IMAGEUSER
57. Oracle
Product Oracle
User ID JMUSER
Password JMUSER
58. Oracle
Product Oracle
User ID JONES
Password STEEL
59. Oracle
Product Oracle
User ID MFG
Password MFG
Notes All Privs
60. Oracle
Product Oracle
User ID MIGRATE
Password MIGRATE
61. Oracle
Product Oracle
User ID MILLER
Password MILLER
62. Oracle
Product Oracle
User ID MMO2
Password MMO2
63. Oracle
Product Oracle
User ID MOREAU
Password MOREAU
64. Oracle
Product Oracle
User ID MODTEST
Password YES
65. Oracle
Product Oracle
User ID MTSSYS
Password MTSSYS
66. Oracle
Product Oracle
User ID NAMES
Password NAMES
67. Oracle
Product Oracle
User ID OCITEST
Password OCITEST
68. Oracle
Product Oracle
User ID ODS
Password ODS
69. Oracle
Product Oracle
User ID OE
Password OE
70. Oracle
Product Oracle
User ID OLAPDBA
Password OLAPDBA
71. Oracle
Product Oracle
User ID PM
Password PM
72. Oracle
Product Oracle
User ID OLAPSVR
Password INSTANCE
73. Oracle
Product Oracle
User ID OLAPSYS
Password MANAGER
74. Oracle
Product Oracle
User ID ORACACHE
Password (random password)
75. Oracle
Product Oracle
User ID ORDPLUGINS
Password ORDPLUGINS
76. Oracle
Product Oracle
User ID ORDSYS
Password ORDSYS
77. Oracle
Product Oracle
User ID OSE$HTTP$ADMIN
Password (random password)
78. Oracle
Product Oracle
User ID OUTLN
Password OUTLN
79. Oracle
Product Oracle
User ID PERFSTAT
Password PERFSTAT
80. Oracle
Product Oracle
User ID PO
Password PO
Notes DBA
81. Oracle
Product Oracle
User ID PO7
Password PO7
82. Oracle
Product Oracle
User ID PORTAL30
Password PORTAL31
83. Oracle
Product Oracle
User ID PORTAL30_DEMO
Password PORTAL30_DEMO
84. Oracle
Product Oracle
User ID PORTAL30_PUBLIC
Password PORTAL30_PUBLIC
85. Oracle
Product Oracle
User ID PORTAL30_SSO
Password PORTAL30_SSO
86. Oracle
Product Oracle
User ID PORTAL30_SSO_PS
Password PORTAL30_SSO_PS
87. Oracle
Product Oracle
User ID PORTAL30_SSO_PUBLIC
Password PORTAL30_SSO_PUBLIC
88. Oracle
Product Oracle
User ID POWERCARTUSER
Password POWERCARTUSER
89. Oracle
Product Oracle
User ID PRIMARY
Password PRIMARY
90. Oracle
Product Oracle
User ID PUBSUB
Password PUBSUB
Notes DBA
91. Oracle
Product Oracle
User ID QS
Password QS
92. Oracle
Product Oracle
User ID QS_ADM
Password QS_ADM
93. Oracle
Product Oracle
User ID QS_CB
Password QS_CB
94. Oracle
Product Oracle
User ID QS_CBADM
Password QS_CBADM
95. Oracle
Product Oracle
User ID QS_CS
Password QS_CS
96. Oracle
Product Oracle
User ID QS_ES
Password QS_ES
97. Oracle
Product Oracle
User ID QS_OS
Password QS_OS
98. Oracle
Product Oracle
User ID QS_WS
Password QS_WS
99. Oracle
Product Oracle
User ID RE
Password RE
100. Oracle
Product Oracle
User ID REPADMIN
Password REPADMIN
101. Oracle
Product Oracle
User ID RMAIL
Password RMAIL
102. Oracle
Product Oracle
User ID RMAN
Password RMAN
103. Oracle
Product Oracle
User ID SAMPLE
Password SAMPLE
Notes DBA
104. Oracle
Product Oracle
User ID SECDEMO
Password SECDEMO
105. Oracle
Product Oracle
User ID SH
Password SH
106. Oracle
Product Oracle
User ID SYSADM
Password SYSADM
107. Oracle
Product Oracle
User ID TRACESVR
Password TRACE
108. Oracle
Product Oracle
User ID TSDEV
Password TSDEV
109. Oracle
Product Oracle
User ID TSUSER
Password TSUSER
110. Oracle
Product Oracle
User ID USER0
Password USER0
111. Oracle
Product Oracle
User ID USER1
Password USER1
112. Oracle
Product Oracle
User ID USER2
Password USER2
113. Oracle
Product Oracle
User ID USER3
Password USER3
114. Oracle
Product Oracle
User ID USER4
Password USER4
115. Oracle
Product Oracle
User ID USER5
Password USER5
116. Oracle
Product Oracle
User ID USER6
Password USER6
117. Oracle
Product Oracle
User ID USER7
Password USER7
118. Oracle
Product Oracle
User ID USER8
Password USER8
119. Oracle
Product Oracle
User ID USER9
Password USER9
120. Oracle
Product Oracle
User ID UTLBSTATU
Password UTLESTAT
121. Oracle
Product Oracle
User ID VIDEOUSER
Password VIDEO USER
122. Oracle
Product Oracle
User ID VIF_DEVELOPER
Password VIF_DEV_PWD
123. Oracle
Product Oracle
User ID VIRUSER
Password VIRUSER
124. Oracle
Product Oracle
User ID VRR1
Password VRR1
125. Oracle
Product Oracle
User ID WKSYS
Password WKSYS
126. Oracle
Product Oracle
User ID CTXSYS
Password (none)
127. Oracle
Product Oracle
User ID DEMO8
Password DEMO8
128. Oracle
Product Oracle
User ID CDEMOCOR
Password CDEMOCOR
129. Oracle
Product Oracle
User ID ODSCOMMON
Password ODSCOMMON
130. Oracle
Product Oracle
User ID OEMADM
Password OEMADM
131. Oracle
Product Oracle
User ID OMWB_EMULATION
Password ORACLE
132. Oracle
Product Oracle
User ID OPENSPIRIT
Password OPENSPIRIT
133. Oracle
Product Oracle
User ID ORAREGSYS
Password ORAREGSYS
134. Oracle
Product Oracle
User ID OSP22
Password OSP22
135. Oracle
Product Oracle
User ID OWA
Password OWA
136. Oracle
Product Oracle
User ID OWA_PUBLIC
Password OWA_PUBLIC
137. Oracle
Product Oracle
User ID PANAMA
Password PANAMA
138. Oracle
Product Oracle
User ID PATROL
Password PATROL
139. Oracle
Product Oracle
User ID PLSQL
Password SUPERSECRET
140. Oracle
Product Oracle
User ID REP_MANAGER
Password DEMO
141. Oracle
Product Oracle
User ID REP_OWNER
Password DEMO
142. Oracle
Product Oracle
User ID REP_OWNER
Password REP_OWNER
143. Oracle
Product Oracle
User ID SAP
Password SAPR3
144. Oracle
Product Oracle
User ID SDOS_ICSAP
Password SDOS_ICSAP
145. Oracle
Product Oracle
User ID SITEMINDER
Password SITEMINDER
146. Oracle
Product Oracle
User ID SLIDE
Password SLIDEPW
147. Oracle
Product Oracle
User ID STARTER
Password STARTER
148. Oracle
Product Oracle
User ID STRAT_USER
Password STRAT_PASSWD
149. Oracle
Product Oracle
User ID SWPRO
Password SWPRO
150. Oracle
Product Oracle
User ID SWUSER
Password SWUSER
151. Oracle
Product Oracle
User ID SYMPA
Password SYMPA
152. Oracle
Product Oracle
User ID SYSMAN
Password OEM_TEMP
153. Oracle
Product Oracle
User ID TAHITI
Password TAHITI
154. Oracle
Product Oracle
User ID TDOS_ICSAP
Password TDOS_ICSAP
155. Oracle
Product Oracle
User ID TESTPILOT
Password TESTPILOT
156. Oracle
Product Oracle
User ID TRAVEL
Password TRAVEL
157. Oracle
Product Oracle
User ID TURBINE
Password TURBINE
158. Oracle
Product Oracle
User ID ULTIMATE
Password ULTIMATE
159. Oracle
Product Oracle
User ID USER
Password USER
160. Oracle
Product Oracle
User ID WEBCAL01
Password WEBCAL01
161. Oracle
Product Oracle
User ID WEBDB
Password WEBDB
162. Oracle
Product Oracle
User ID WEBREAD
Password WEBREAD
163. Oracle
Product Oracle
User ID WWW
Password WWW
164. Oracle
Product Oracle
User ID WWWUSER
Password WWWUSER
165. Oracle
Product Oracle
User ID XPRT
Password XPRT
166. Oracle
Product Oracle
User ID ADMINISTRATOR
Password ADMINISTRATOR
Level Administrator
167. Oracle
Product Oracle
User ID ADMINISTRATOR
Password admin
Level Administrator
168. Oracle
Product Oracle
User ID ANDY
Password SWORDFISH
169. Oracle
Product Oracle
User ID AP
Password AP
170. Oracle
Product Oracle
User ID APPUSER
Password APPUSER
171. Oracle
Product Oracle
User ID BRIO_ADMIN
Password BRIO_ADMIN
172. Oracle
Product Oracle
User ID DEV2000_DEMOS
Password DEV2000_DEMOS
173. Oracle
Product Oracle
User ID DISCOVERER_ADMIN
Password DISCOVERER_ADMIN
174. Oracle
Product Oracle
User ID DSGATEWAY
Password DSGATEWAY
175. Oracle
Product Oracle
User ID DSSYS
Password DSSYS
176. Oracle
Product Oracle
User ID GL
Password GL
177. Oracle
Product Oracle
User ID HCPARK
Password HCPARK
178. Oracle
Product Oracle
User ID JWARD
Password AIROPLANE
179. Oracle
Product Oracle
User ID L2LDEMO
Password L2LDEMO
180. Oracle
Product Oracle
User ID MDDEMO
Password MDDEMO
181. Oracle
Product Oracle
User ID MDDEMO_CLERK
Password CLERK
182. Oracle
Product Oracle
User ID MDDEMO_MGR
Password MGR
183. Oracle
Product Oracle
User ID MGWUSER
Password MGWUSER
184. Oracle
Product Oracle
User ID ODM
Password ODM
185. Oracle
Product Oracle
User ID ODM_MTR
Password MTRPW
186. Oracle
Product Oracle
User ID OEMREP
Password OEMREP
187. Oracle
Product Oracle
User ID OO
Password OO
188. Oracle
Product Oracle
User ID ORASSO
Password ORASSO
189. Oracle
Product Oracle
User ID OWNER
Password OWNER
190. Oracle
Product Oracle
User ID PLEX
Password PLEX
191. Oracle
Product Oracle
User ID PORTAL30
Password PORTAL30
192. Oracle
Product Oracle
User ID PUBSUB1
Password PUBSUB1
193. Oracle
Product Oracle
User ID QDBA
Password QDBA
194. Oracle
Product Oracle
User ID REPORTS_USER
Password OEM_TEMP
195. Oracle
Product Oracle
User ID SERVICECONSUMER1
Password SERVICECONSUMER1
196. Oracle
Product Oracle
User ID SYS
Password D_SYSPW
197. Oracle
Product Oracle
User ID SYSTEM
Password D_SYSTPW
198. Oracle
Product Oracle
User ID internal
Password oracle
199. Oracle
Product Oracle
User ID scott
Password tiger or tigger
200. Oracle
Product Oracle
User ID system
Password manager
201. Oracle
Product Oracle
User ID sys
Password change_on_install
202. Oracle
Product Oracle
User ID demo
Password demo
203. Oracle
Product Oracle
User ID oracle
Password oracle
204. Oracle
Product Oracle
User ID sys
Password sys
205. Oracle
Product Personal Oracle
Version 8
Method Multi
User ID PO8
Password PO8
206. Oracle
Product Oracle
User ID DIP
Password DIP
207. Oracle
Product Oracle
User ID EXFSYS
Password EXFSYS
208. Oracle
Product Database
Version OC4J 10g (10.1.3) Developer Preview
User ID admin
Password welcome
209. Oracle
Product Oracle BPEL Process Manager
User ID bpel
Password bpel