miércoles, 10 de junio de 2015

Como Migrar los SQL PROFILES de una Base a Otra

Cuando tenemos que migrar los sql profiles de una base de datos a otra, por ej los generados en Testing a Produccion debemos realizar los siguientes pasos
1 - En la Base Origen ; Verificar cuantos sql_profiles tenemos
select count(*) from dba_sql_profiles;

2 - Crear una Staging Table
Esta tabla no la podemos crear en SYS, en este ejemplo esta en SYSTEM, pero se puede usar cualquier usuario
sqlplus / as sysdba
SQL> BEGIN
DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF
(table_name => ‘TAB_SQL_PROFILES’,schema_name=>’SYSTEM’);
     END;
/

3. Copiar los SQL PROFILES a la Staging Table
SQL> BEGIN
DBMS_SQLTUNE.PACK_STGTAB_SQLPROF
(profile_category => ‘%’,
staging_table_name => ‘TAB_SQL_PROFILES’,
staging_schema_owner=>’SYSTEM’);
END;
/

4. Verificar
 select count(*) from SYSTEM.TAB_SQL_PROFILES;

5 . Exportar los SQL PROFILES
expdp system/***** dumpfile=expdp_sql_profiles.dmp TABLES=SYSTEM.TAB_SQL_PROFILES
DIRECTORY=DATA_PUMP_DIR

(Verificar donde apunta el directorio select * from dba_directories;)

6. Transferir el dump al servidor de la Base Destino

7. En la Base Destino : Crear la Staging Table
sqlplus / as sysdba
SQL> BEGIN
DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF
(table_name => ‘TAB_SQL_PROFILES’,schema_name=>’SYSTEM’);
     END;
/

8. Importar los SQL PROFILE, con TABLE_EXISTS_ACTION=TRUNCATE, esto implica que si la tabla existe ejecuta el truncate y la carga con los datos del dump

impdp system/***** dumpfile=expdp_sql_profiles.dmp TABLES=SYSTEM.TAB_SQL_PROFILES DIRECTORY=DATA_PUMP_DIR TABLE_EXISTS_ACTION=TRUNCATE

9. Verificar que se importaron
select count(*) from SYSTEM.TAB_SQL_PROFILES;

10. Verificar cuantos SQL PROFILES hay antes de desempaquetar
select count(*) from dba_sql_profiles;

11. Desempaquetar
SQL> BEGIN
DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF
(staging_table_name => ‘TAB_SQL_PROFILES’,
staging_schema_owner=>’SYSTEM’, replace=>FALSE);

12. Verificar que se agregaron bien los profiles. Tiene que dar el valor del resultado que dio el punto 10 + el punto 11, salvo que ya existiera previamente alguno de los profiles en ese caso puede dar menos.
select count(*) from dba_sql_profiles;