oracle SQL配置文件 4

1.1.1.1   移动SQL配置文件

dbms_sqltune包提供了多个过程以在数据库之间移动SQL配置文件。如图11-7显示,会提供以下功能。

可以通过 create_stgtab_sqlprof 过程创建临时表。

可以通过 pack_stgtab_sqlprof 过程将数据字典中的SQL配置文件复制到临时表中。

可以通过 remap_stgtab_sqlprof 过程修改保存在临时表中的SQL配置文件名和类别。

可以通过 unpack_stgtab_sqlprof 过程将临时表中的SQL配置文件复制到数据字典中。

图11-7 使用dbms_sqltune包移动SQL配置文件


请注意,在数据库之间移动临时表依靠的是数据移动技术(例如,数据泵(Data Pump)或旧有的导出(export)和导入(import)程序),并不依靠dbms_sqltune包本身。

下面的例子,引用自profile_cloning.sql脚本,显示了如何在单个数据库中复制SQL配置文件。首先,mystgtab临时表是在当前模式(schema)中创建的:

BEGIN

  dbms_sqltune.create_stgtab_sqlprof(

    table_name      => 'MYSTGTAB',

    schema_name     => user,

    tablespace_name => 'USERS'

  );

END;

/

接着,会将名称为opt_estimate的SQL配置文件从数据字典复制到临时表中:

BEGIN

  dbms_sqltune.pack_stgtab_sqlprof(

    profile_name         => 'opt_estimate',

    profile_category     => 'TEST',

    staging_table_name   => 'MYSTGTAB',

    staging_schema_owner => user

  );

END;

/

将SQL配置文件复制回数据字典中之前,必须修改SQL配置文件名。同时,也要修改它的类别:

BEGIN

  dbms_sqltune.remap_stgtab_sqlprof(

    old_profile_name     => 'opt_estimate',

    new_profile_name     => 'opt_estimate_clone',

    new_profile_category => 'TEST_clone',

    staging_table_name   => 'MYSTGTAB',

    staging_schema_owner => user

  );

END;

/

最后,将SQL配置文件从临时表复制到数据字典中。由于参数会被替换成TRUE,同名的SQL配置文件也会被改写:

BEGIN

  dbms_sqltune.unpack_stgtab_sqlprof(

    profile_name         => 'opt_estimate_clone',

    profile_category     => 'TEST_CLONE',

    replace              => TRUE,

    staging_table_name   => 'MYSTGTAB',

    staging_schema_owner => user

  );

END;

/

1.1.1.1   删除SQL配置文件

可以使用dbms_sqltune包中的drop_sql_profile过程来删除数据字典中的SQL配置文件。Name参数指定SQL配置文件名。Ignore参数指定当SQL配置文件不存在时是否报错。默认值为FALSE:

dbms_sqltune.drop_sql_profile(name=>'opt_estimate',ignore=>true);

1.1.1.2   权限

要创建、修改和删除SQL配置文件,分别需要create any sql profile、alter any sql profile和 drop any sql profile系统权限。然而,从11.1版本开始,这三个系统权限不再支持administer sql management系统权限对象。SQL配置文件没有对象权限。要使用SQL优化顾问,就需要advisor系统权限。

最终用户不需要特定权限也可以使用SQL配置文件。