1. 程式人生 > >dbms_stats 匯入匯出 schema 級別統計資訊

dbms_stats 匯入匯出 schema 級別統計資訊

    在使用CBO優化器模式的Oracle資料庫中,統計資訊是CBO生成最佳執行計劃的重要依據。這些統計資訊通常包括列級、表級、索引、系統級別的統計資訊等。所有的這些統計資訊都可以被備份,匯入匯出也可以被鎖定與解鎖。因此相應地,我們可以匯出列級、表級、索引、系統級別的統計資訊。通過匯出匯入統計資訊,可以在測試環境來模擬產生環境進行資料庫效能優化,SQL調優等。本文主要描述了基於schema級別匯出匯入統計資訊到不同的資料庫。

    關於統計資訊的具體描述與用法,本文不作詳細介紹,大家可以參考 Oracle references 。

1、匯入匯出統計資訊的情形或作用
  a、可以把生產環境的統計資訊匯入到測試環境使得執行計劃的產生能極大程度上等同於生產環境
  b、通過匯入匯出可以凍結執行計劃,即控制與對比不同環境中的執行計劃
  c、統計資訊可以在重新analyze schema之前進行備份,防止analyze後效能下降
  d、系統級別的統計資訊可以被移植到小型伺服器來模擬Oracle在大型伺服器的執行環境
  e、系統級別的統計資訊也可以用於遷移到新伺服器以保證一致的執行計劃直到真正開始使用新伺服器
  f、由於不同的工作負載需要使用不同的統計資訊,可以在這些負載執行前給予合適的統計資訊(如白天的OLTP,晚上為批量job模式)

2、schema級別統計資訊匯出匯入的主要步驟
  a、收集統計資訊(源schema或者含系統級別)
  b、建立用於儲存統計資訊的表(如stats_table)
  c、使用dbms_stats.export_schema_stats匯出schema統計資訊到表stats_table
  d、使用datapump expdp匯出stats_table表。(可考慮SQL*Plus copy方式實現來避免匯入匯出)
  e、ftp或scp/cp dump檔案到目的schema所在的伺服器
  f、使用datapump impdp匯入dmp檔案到目的schema,如果需要備份,應在匯入之前備份原統計資訊
  g、使用dbms_stats.import_system_stats匯入統計資訊到所需的schema

3、建立統計資訊的示例
--下面是一個基於schema scott級別進行收集統計資訊的例子

BEGIN
   DBMS_STATS.gather_schema_stats (ownname            => 'SCOTT',
                                   options            => 'GATHER AUTO',
                                   estimate_percent   => DBMS_STATS.auto_sample_size,
                                   method_opt         => 'for all columns size repeat',
                                   degree             => 8);
END;
/

4、演示匯出匯入統計資訊導不同的DB

--下面將資料庫mmbo5上scott的統計資訊匯入到另外一個數據庫mmbo4下的scott中
a、收集統計資訊
[email protected]> delete from emp where deptno=20;

[email protected]> commit;

[email protected]> exec dbms_stats.gather_schema_stats('SCOTT',cascade=>true);

[email protected]> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10      --->emp表被刪除了5條記錄還剩9條
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
TT                                      4 20130513 22:19:10

b、建立用於儲存統計資訊的表
--可以指定表存放於哪個表空間,如果預設則存放到使用者的預設表空間
[email protected]> exec dbms_stats.create_stat_table('SCOTT', 'STATS_TABLE');

PL/SQL procedure successfully completed.

c、匯出scott的統計資訊到stats_table
[email protected]> exec dbms_stats.export_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

[email protected]> exit

d、匯出統計資訊到dump檔案
[email protected]:~> expdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=st.log tables=STATS_TABLE

Export: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:20:53

Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
. . exported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  /u02/database/MMBO5/BNR/dump/st.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 22:21:11

e、ftp統計資訊到目的伺服器並匯入dump檔案
--由於下面是在同一臺伺服器,所以直接用cp命令複製dump檔案到特定目錄
[email protected]:~> cp /u02/database/MMBO5/BNR/dump/st.dmp /u02/database/MMBO4/BNR/dump

f、使用datapump impdp匯入dmp檔案到目的schema
[email protected]:~> export ORACLE_SID=MMBO4
[email protected]:~> impdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=imp_st.log tables=STATS_TABLE

Import: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:22:57
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 22:23:03

g、匯入統計資訊到目標資料庫的schema
--匯入前先檢視一下本資料庫scott的統計資訊
[email protected]> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:16:05
EMP                                    14 20130513 22:16:05
BONUS                                   0 20130513 22:16:05
SALGRADE                                5 20130513 22:16:05
T                                   49991 20130513 22:16:20

6 rows selected.

--匯入統計資訊
[email protected]> exec dbms_stats.import_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

--可以通過查詢檢視dba_optstat_operations獲得目標資料庫上統計資訊日誌
ALTER SESSION SET nls_timestamp_tz_format='yyyy-mm-dd hh24:mi:ss';
COL start_time FORMAT a14
COL end_time FORMAT a14
COL operation FORMAT a30
COL target FORMAT a30
SET LINESIZE 120

SELECT operation,
       target,
       start_time,
       end_time
  FROM dba_optstat_operations
 WHERE operation LIKE 'import%';

OPERATION                      TARGET                         START_TIME     END_TIME
------------------------------ ------------------------------ -------------- --------------
import_schema_stats            SCOTT                          2013-05-13 22: 2013-05-13 22:
                                                              24:23          24:23

--Author: Robinson
--Blog  : http://blog.csdn.net/robinson_0612
                                                               
--下面的查詢也可以看到此時scott下LAST_ANALYZED已經被更新為與源伺服器上的統計資訊相同
[email protected]> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
T                                   49991 20130513 22:16:20

6 rows selected.

[email protected]> select count(*) from emp;

  COUNT(*)
----------
        14
--實際上在mmbo4上表emp的資料依舊為14條,但統計資訊為9條,是來自源資料庫的統計資訊
--對於源資料庫schema上存在,但目標資料庫schema不存在的物件,如mmbo5上的表tt,在mmbo4上不會被匯入
--對於源資料庫schema上不存在,但目標資料庫schema存在的物件,如mmbo4上的表t,其統計資訊沒有被更新

h、根據需要可以考慮是否清除儲存統計資訊的表
[email protected]> exec dbms_stats.drop_stat_table('SCOTT','STATS_TABLE');

PL/SQL procedure successfully completed.

--對於系統級別的統計資訊的匯入匯出,此處不做演示,需要注意的是應使用dbms_stats中相應的匯入匯出procedure.
--dbms_stats.gather_system_stats
--dbms_stats.import_system_stats
--dbms_stats.export_system_stats

更多參考

相關推薦

dbms_stats 匯入匯出 schema 級別統計資訊

    在使用CBO優化器模式的Oracle資料庫中,統計資訊是CBO生成最佳執行計劃的重要依據。這些統計資訊通常包括列級、表級、索引、系統級別的統計資訊等。所有的這些統計資訊都可以被備份,匯入匯出也可以被鎖定與解鎖。因此相應地,我們可以匯出列級、表級、索引、系統級別的統計資

匯入匯出統計資訊一例

下面以匯入匯出索引的統計資訊為例進行說明: Microsoft Windows XP [版本 5.1.2600] (C) 版權所有 1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>oradim -startup

oracle用dbms_stats包收集統計資訊

dbms_stats包裡最常用的就是如下4個儲存過程: gather_table_stats:用於收集目標表、目標表的列和目標表上的索引的統計資訊。 gather_index_stats:用於收集指定索引的統計資訊。 gather_schema_stats:用於收集指定schema下所有物件的統計資訊。

Mysql分庫分表匯出匯入和資料量統計測試

需求:新增建立了分庫分表後,業務可能將資料已經寫入,但未來得及接入到otter彙總庫。接入彙總庫前需要初始化這部分資料。 1.匯出 ip_port_list=(5.5.5.101:3306 5.5.5.102:3306) len=${#ip_port_list[@]} for ((

EXP-00091: 正在匯出有問題的統計資訊 解決辦法

以使用者模式匯出資料時: 最近在匯出資料庫時,經常會見到提示“EXP-00091: 正在匯出有問題的統計資訊”,原來是因為我的電腦的作業系統的字符集和資料庫的字符集不一致導致(我的oracle伺服器安

EXP-00091: 正在匯出有問題的統計資訊 錯誤解決

EXP-00091: 正在匯出有問題的統計資訊 原因分析: 網上查詢後發現,原因在於客戶端和服務端的oracle字符集不同 現在服務端的字符集為ALU32UTF8,客戶端字符集為ZHS16GBK,兩邊字符集需要進行統一。 為了能更好的支援中文,我選擇把服務端的字符集改

Java型別資訊與用反射機制編寫通用的Excel匯入匯出

Java類檔案編譯後,會在類中新增一個靜態屬性,這個屬性就是Class類的例項,用於描述型別資訊。描述類資訊的架構圖如:    Class物件提供了一組方法,讓我們可以方便獲取類的屬性,方法,構造方法等資訊,並且用Field,Method,Constructor類

poiExcel表格所有操作以及資料匯入匯出

這個是本人在學習中記錄的筆記以供大家參考 Poi簡介: 1.1什麼是poi Apache POI [1]  是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Offi

mysql匯入匯出指定資料指令碼(含遠端)及弊端

有時候,需要匯出表中的指定列的資料,拼接成INSERT語句。如下: Code(遠端匯出需要加入引數"-h+ip";本地則去掉該引數,或者將ip換為本地ip即可) mysql -h+ip -uusername -ppassword -e "select concat('insert i

mysql匯入匯出全部資料指令碼(含遠端)及錯誤收集

使用mysql的mysqldump命令進行資料的匯入匯出。 1、匯出 匯出(遠端): 以下指令碼為預設語句,其他引數預設 mysqldump -h127.0.0.1 -uusername -ppassword --databases dbname --tables tablenam

yii框架實現phpexcel匯入匯出

yii框架實現phpexcel匯入匯出 首先進行phpexcel安裝 網上有很多擴充套件安裝,這裡就不介紹了,可以通過composer安裝,也可以手動下載引入,這裡需要注意的是composer和手動下載在引用類時不太一樣,composer安裝的直接用根名稱空間即可"/PHPExc

springboot2整合easypoi,實現Excel匯入匯出

1.新增Maven依賴 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <v

使用POI將資料匯入匯出資料庫。

POI將資料匯入匯出資料庫。(採用ssm框架) 1.前臺列表的展示 <script type="text/javascript"> //進行資料的全選 function selectAll(){ var ids=document.get

Excle 匯入匯出

pom.依賴 <!--poi--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version

Oracle資料庫資料常用的匯入匯出

採用exp/imp命令 知識擴充:   資料泵匯出匯入(EXPDP和IMPDP)的作用    1、實現邏輯備份和邏輯恢復。    2、在資料庫使用者之間移動物件。    3、在資料庫之間移動物件    4、實現表空間搬移。   資料泵匯出匯

【轉載】oracle 資料匯入匯出

oracle 資料匯入匯出   一、oracle中copy from的用法     1.語法及使用說明   1.1 語法   下面我們來看一下SQL*Copy Command的語法及使用說明。   在解釋SQ

Hive命令之三:hive的資料匯入匯出

Hive 資料的匯入匯出: 一 Hive資料匯出   1、匯出資料到本地檔案系統:      insert overwrite local directory '/software/data/data1' select * f

oracle 11g 資料庫表空間建立與資料匯入匯出

** oracle資料庫中進行資料的匯入匯出時要在cmd中進行而不是在sqlplus中進行操作! (1)向oracle資料庫中匯入完整的資料庫(字尾名:dmp)      首先進入cmd,輸入sqlplus /nolog執行oracle自帶程式,

SSM整合開發之CSV檔案匯入匯出實戰-鍾林森-專題視訊課程

SSM整合開發之CSV檔案匯入匯出實戰—65人已學習 課程介紹         本課程將給大家分享如何基於SSM實現CSV檔案的匯入匯出,並講解目前企業級JavaWeb應用mvc三層模式的開發流程,

基於SSM的POI匯入匯出Excel實戰-鍾林森-專題視訊課程

基於SSM的POI匯入匯出Excel實戰—282人已學習 課程介紹         本課程將給大家分享如何基於SSM實現POI匯入匯出Excel,並講解目前企業級JavaWeb應用mvc三層模式的開