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配置文件。