среда, 6 октября 2010 г.

Сбор статистики на копии промышленной базы данных

1. На промышленной и резервной базах данных создаем таблицу STATTAB

$export ORACLE_SID=prod
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

begin
DBMS_STATS.create_stat_table(ownname => 'SYSTEM',stattab => 'STATTAB',tblspace => 'SYSAUX');
end;
/

$export ORACLE_SID=rez1
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

begin
DBMS_STATS.create_stat_table(ownname => 'SYSTEM',stattab => 'STATTAB',tblspace => 'SYSAUX');
end;
/


2. Создаем резервную копию текущей статистики промышленной базы данных

На промышленном сервере запускаем процедуру экспорта текущей статистики
в таблицу STATTAB.

$export ORACLE_SID=prod
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

begin
DBMS_STATS.export_schema_stats(ownname => 'OWS',stattab => 'STATTAB',statid => 'exp1' ,statown => 'SYSTEM');
end;
/

Смотрим содержимое таблицы STATTAB.

select * from system.stattab

Создаем резервную копию таблицы STATTAB

$export ORACLE_SID=prod

$exp \'/ as sysdba\' file=/u01/app/oracle/backups/dmp/stats_table.dmp.`date +%Y-%m-%d-%H:%M:%S` log=/u01/app/oracle/backups/dmp/stats_table.log.`date +%Y-%m-%d-%H:%M:%S` tables=SYSTEM.STATTAB

Export: Release 10.2.0.4.0 - Production on Wed Oct 6 16:30:07 2010

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in CL8ISO8859P5 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
Current user changed to SYSTEM
. . exporting table STATTAB 95211 rows exported
Export terminated successfully without warnings.
$

3. Сбор статистики на копии промышленной базы данных (SID=rez1)
(отдельная тема)

4. Переносим статистику собранную на базе rez1 в таблицу STATTAB

$export ORACLE_SID=rez1

Проверяем что таблица существует (мы ее создали в п.1)

select * from system.stattab

Переносим в нее собранную статистику

$export ORACLE_SID=prod
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

begin
DBMS_STATS.export_schema_stats(ownname => 'OWS',stattab => 'STATTAB',statid => 'imp1' ,statown => 'SYSTEM');
end;
/

Смотрим содержимое таблицы:

select * from system.stattab

5. Выгружаем содержимое таблицы STATTAB в файл дампа stats_table.dmp

exp \'/ as sysdba\' file=/u01/app/oracle/backups/dmp/stats_table.dmp log=/u01/app/oracle/backups/dmp/stats_table.log tables=SYSTEM.STATTAB

Export: Release 10.2.0.4.0 - Production on Wed Oct 6 16:30:07 2010

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in CL8ISO8859P5 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
Current user changed to SYSTEM
. . exporting table STATTAB 95211 rows exported
Export terminated successfully without warnings.
$


6. Производим импорт содержимого файла stats_table.dmp в таблицу STATTAB на промышленной базе данных

(текущая статистика была сохранена в п.2)

$imp \'/ as sysdba\' file=/u01/app/oracle/backups/dmp/stats_table.dmp log=/u01/app/oracle/backups/dmp/stats_import.log fromuser=system touser=system ignore=y

Import: Release 10.2.0.4.0 - Production on Wed Oct 6 16:59:59 2010

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V10.02.01 via conventional path
import done in CL8ISO8859P5 character set and AL16UTF16 NCHAR character set
. importing SYSTEM's objects into SYSTEM
. . importing table "STATTAB" 100151 rows imported
Import terminated successfully without warnings.
$

7. Применяем перенесенную статистику на промышленной базе данных

$export ORACLE_SID=prod
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

begin
DBMS_STATS.IMPORT_schema_stats(ownname => 'OWS',stattab => 'STATTAB',statid => 'imp1',statown => 'SYSTEM');
end;
/
commit;

8. Очистка содержимого таблиц STATTAB

После успешного переноса статистики можно очистить содержимое таблиц STATTAB на промышленной базе и базе rez1

truncate table system.stattab

Проверяем

select * from system.stattab

9. Типичные ошибки

Иногда, если в копии промышленной базы были произведены изменения в структуре таблиц (например, добавлены новые столбцы) при импорте статистики процедура DBMS_STATS.IMPORT_schema_stats завершается с ошибкой:

ORA-20000: Unable to set values for column STORE_COLUMN:
does not exist or insufficient privilegesORA-06512:
at "SYS.DBMS_STATS", line 6824ORA-06512: at "SYS.DBMS_STATS", line 6850ORA-06512:
at "SYS.DBMS_STATS", line 7382ORA-06512: at line 2

Это значит что, в какой то таблице в базе rez1 появилось новое поле STORE_COLUMN, которое отсутствует в соответствующей таблице в базе prod.

Статистику по этому полю следует удалить из таблицы STATTAB на промышленной базе данных и повторно запустить процедуру импорта:

select c1 from system.stattab where c4 = 'STORE_COLUMN'
возвратит имя таблицы:
ADDR_LEVEL

select * FROM system.stattab where c1 = 'ADDR_LEVEL' and c4='STORE_COLUMN';
delete FROM system.stattab where c1 = 'ADDR_LEVEL' and c4='STORE_COLUMN';

$export ORACLE_SID=prod
$sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Oct 7 11:27:19 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>
begin
DBMS_STATS.IMPORT_schema_stats(ownname => 'OWS',stattab => 'STATTAB',statid => 'imp1',statown => 'SYSTEM');
end;
/
commit;