Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Как перенести SQL-профили из одной базы в другую : Oracle

26.12.2024 19:58


02.12.2024 15:42
Мое мнение, что в нормальной базе SQL-профили не должны жить дольше трех месяцев. У меня даже задание было раньше, что профили старше трех месяцев удаляются. Ситуация, которая приводит к созданию профиля, обычно разрешается принятием временного решения о создании профиля на время, когда программисты запрос кривой перепишут так, чтобы он работал прямо и нормально. Затяжной профиль кончается обычно какой-то пакостью, когда он в уже изменившейся базе продолжает выкручивать базе с каким-то запросом и вместо ускорения начинаются тормоза и глюки.

Вот, на старуху бывает проруха, я, увидев древнючие профили в количестве 127 штук на новой для себя базе, сложил обстоятельство, что у меня есть копия базы, но не выключил, а снес профили
SQL код:
declare
cursor c1 is select name from dba_sql_profiles;
begin
for r1 in c1 loop
dbms_sqltune.drop_sql_profile(r1.name);
end loop;
end;
/ 
однако, это я думал про нормальные условия... а тут, как оказалось, народ радостно обвешивался профилями и код никто не правил, соответственно, профили надо было вернуть, достать их из другой точно такой же базы.
Смотрим на профили во всем их многообразии:
SQL код:
select * from dba_sql_profiles where status='ENABLED'; 
Для начала дадим своему юзеру права на табличное пространство. У меня на 127 профилей получилось потом в итоге 600Мб дампа, то есть и табличка не совсем крошечная.
SQL код:
alter user "OLEGON" quota unlimited on USERS; 
Создадим табличку для переноса профилей
SQL код:
BEGIN
  DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF (
    table_name  => 'OK_SQLPROF'
,   schema_name => 'OLEGON'
);
END;
/ 
Если какие-то ошибки будут, то не забываем табличку чистить
SQL код:
truncate table "OLEGON"."OK_SQLPROF"; 
переносим профили в табличку, все включенные, выключенные перенести нельзя
SQL код:
declare
cursor c1 is select name from dba_sql_profiles where status='ENABLED';
begin
for r1 in c1 loop
DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name =>'OK_SQLPROF',STAGING_SCHEMA_OWNER => 'OLEGON',profile_name=>r1.name);
end loop;
end;
/ 
Можем посмотреть на содержимое этой таблички
SQL код:
select count(*) from "OLEGON"."OK_SQLPROF"; 
Теперь необходимо выбрать директорию для экспорта в файлик, при необходимости - создать ее.
SQL код:
select * from dba_directories; 
создаем файлик
Код:
expdp directory=EXPORT_DIR dumpfile=ok_sqlprofiles.dmp logfile=ok_sqlprofiles.log tables="OLEGON.OK_SQLPROF"
переносим его на целевую базу и импортируем (возможно, что пользователю опять надо будет дать квоту, как делали до этого)
Код:
impdp directory=IMPORT_DIR dumpfile=ok_sqlprofiles.dmp logfile=ok_sqlprofiles.log
Ну и, соответственно, из импортированной таблички переносим SQL-профили на место...
SQL код:
begin
DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF(REPLACE => TRUE,staging_table_name =>'OK_SQLPROF',STAGING_SCHEMA_OWNER => 'OLEGON');
end; 
Все профили будут с текущей датой создания.
09.12.2024 15:44
Может, кто-то все же присоединится к обсуждению?
Часовой пояс GMT +3, время: 19:58.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.