首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Oracle SQL Tuning Set (STS) 跨實例遷移指南:打包、Data Pump 導出導入、DBMS_SQLTUNE 核心 API 與 Enterprise Manager 操作

     編輯:MySQL 綜合教學

背景與價值

  • **SQL Tuning Set (STS)**:SQL 語句集合 + 執行上下文 (綁定變量、執行計劃、統計信息)。
  • **用途**:SQL Tuning Advisor 輸入源、SQL Performance Analyzer (SPA) 對比基線、回歸測試。
  • **跨實例遷移場景**:生產庫捕獲 STS → 測試庫分析調優 → 避免生產庫負擔、權限隔離。
  • **版本支持**:10gR2 (10.2.0.1+) 引入 `DBMS_SQLTUNE.PACK_STGTAB_SQLSET` / `UNPACK_STGTAB_SQLSET`。

遷移全流程 (5 步)

步驟 1:創建/選擇 STS (源庫)


-- 方式 A: Enterprise Manager (GUI) 從 AWR/ASH/游標緩存/用戶定義創建
-- 方式 B: PL/SQL 手動創建
EXEC DBMS_SQLTUNE.CREATE_SQLSET(sqlset_name => 'MY_STS', description => 'Prod Top SQL');
DECLARE
  cur DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
  OPEN cur FOR SELECT VALUE(p) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_CACHE) p;
  DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'MY_STS', populate_cursor => cur);
END;
/

步驟 2:創建中轉表 (源庫)


EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLSET(table_name => 'STS_STAGING', schema_name => 'DBA_TOOLS');
-- 生成表 DBA_TOOLS.STS_STAGING

步驟 3:打包 STS 到中轉表 (源庫)


EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET(
    sqlset_name => 'MY_STS',
    staging_table_name => 'STS_STAGING',
    staging_schema_owner => 'DBA_TOOLS'
);
-- 驗證
SELECT COUNT(*) FROM DBA_TOOLS.STS_STAGING;

步驟 4:遷移中轉表 (Data Pump / DB Link / 物理拷貝)


# 源庫導出
expdp dba_tools/pass directory=DP_DIR dumpfile=sts.dmp tables=STS_STAGING logfile=sts_exp.log

# 目標庫導入
impdp dba_tools/pass directory=DP_DIR dumpfile=sts.dmp tables=STS_STAGING logfile=sts_imp.log
-- 或 Database Link: INSERT INTO target.DBA_TOOLS.STS_STAGING SELECT * FROM source.DBA_TOOLS.STS_STAGING@dblink;

步驟 5:解包 STS 到目標庫 (目標庫)


EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(
    sqlset_name => 'MY_STS',
    staging_table_name => 'STS_STAGING',
    staging_schema_owner => 'DBA_TOOLS',
    replace => TRUE  -- 同名覆蓋
);
-- 驗證
SELECT name, statement_count FROM USER_SQLSET WHERE name = 'MY_STS';

關鍵 API 速查

API用途關鍵參數
CREATE_SQLSET創建空 STSsqlset_name, description
LOAD_SQLSET從游標緩存/AWR/用戶表填充populate_cursor, load_option (INSERT/UPDATE/MERGE)
SELECT_CURSOR_CACHE選擇共享池 SQL 填充游標basic_filter (SQL_TEXT LIKE '%...%')
SELECT_WORKLOAD_REPOSITORY從 AWR 快照選擇begin_snap, end_snap
CREATE_STGTAB_SQLSET創建中轉表table_name, schema_name, tablespace_name
PACK_STGTAB_SQLSETSTS → 中轉表sqlset_name, staging_table_name, staging_schema_owner
UNPACK_STGTAB_SQLSET中轉表 → STSsqlset_name, staging_table_name, replace
DROP_SQLSET刪除 STSsqlset_name

Enterprise Manager 操作路徑

  1. Performance → SQL Tuning Sets → Create / Import / Export。
  2. Export 向導自動執行 `PACK_STGTAB_SQLSET` + Data Pump 導出 `.dmp`。
  3. Import 向導自動 Data Pump 導入 + `UNPACK_STGTAB_SQLSET`。

遷移後驗證與分析


-- 目標庫運行 SQL Tuning Advisor
DECLARE
  tname VARCHAR2(30) := 'MY_TUNING_TASK';
BEGIN
  tname := DBMS_SQLTUNE.CREATE_TUNING_TASK(sqlset_name => 'MY_STS', scope => 'COMPREHENSIVE', time_limit => 3600);
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(tname);
END;
/
-- 查看報告
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('MY_TUNING_TASK') FROM DUAL;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved