Oracle Snapshot & Materialized view

oracle snapshot

Step 1: Connect String 需加在 DB Server 的中

此處的 ConnectionString 名稱不用加 .DomainCOM.TW

ConnectionStringName(建議命名為: ServerNameSID) =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = IP or HostName)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SID = SID_Name)

      (SERVER = DEDICATED)

    )

  )

 

D:\Oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora

oracle snapshot1.png

P.S

其它 tnsnames.ora Format:

ConnectionStringName(建議命名為: ServerNameSID) .Domain.COM.TW =
  (DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
          (COMMUNITY = tcp.Domain.COM.TW)
          (PROTOCOL = TCP)
          (Host = IP or HostName)
          (Port = 1521)
        )
        (ADDRESS =
          (COMMUNITY = tcp.DomainCOM.TW)
          (PROTOCOL = TCP)
          (Host = IP or HostName)
          (Port = 1526)
        )
        (ADDRESS =
          (COMMUNITY = tcp.DomainCOM.TW)
          (PROTOCOL = TCP)
          (Host = IP or HostName)
          (Port = 1525)
        )       
    )
    (CONNECT_DATA = (SID = SID_Name)
    )
  )

http://blog.roodo.com/mywork/archives/1438997.html

http://docs.oracle.com/cd/B10500_01/network.920/a96581/tnsnames.htm

http://blog.csdn.net/ywq5914251/article/details/8373486

http://rickyju.pixnet.net/blog/post/28183404-oracle-%3A-listener.ora,-sqlnet.ora,-tnsnames.ora

1. 上述的 SID 也可寫成 SERVICE_NAME, Ex: (SERVICE_NAME = SID_Name))

2.ConnectionStringName也可以指定Domain(假設Domain為DD): ServerNameSID.DD

在 PL/SQL 中登入 (必須在 Oracle Client 中的 tnsnames.ora 也加上 ConnectionString, 此處的 ConnectionString 名稱需加 .DomainCOM.TW)

image

若將 ServerNameSID.DD 加上 COM.TW , 在 PL/SQL 中登入就不用指定Domain, Ex: ServerNameSID.DD.COM.TW

image

 

Step 2.1: 建立 DB Link

oracle snapshot2.png

Step 2.2: 設定 Connection Related

oracle snapshot3.png

Step 2.3: 測試 DB link 是否成功

Step 3: 建立 Snapshot

Snapshot 的 Refresh 分 3 種

Fast:快速(增量)刷新,雖然這是首選不過也會依據查詢的sql有不同的限制, 但快速刷新比完全刷新速度快,因為快速刷新 Snapshot 的數據較少,僅需變更修改過的數據。

Complete:完整刷新,會刪除MVL後在依據查詢sql重新產生MV(花費更多時間)。

Force:由Oracle自動判斷是否滿足fast refresh條件否則就執行complete(預設)。

Step 3.1: Snapshot 快速刷新前置作業

快速刷新需要建立 Snapshot log, 建立 Snapshot log 之前必須先建立 Snapshot Table

再將 snapshotClientTable 加上 Primary Key, 接下來就可以建立 Snapshot Log

Step 3.2: 建立 Snapshot

若使用”完全刷新”可以省略 Step 3.1, 快速刷新與完全刷新建立 Snapshot 部分幾乎相同, 完全刷新需再第7行設定 REFRESH COMPLETE, 設定 REFRESH FAST 為快速刷新, 下列以完全刷新為例:



TABLESPACE <TableSpaceName>

STORAGE (INITIAL100K NEXT50K PCTINCREASE0)

REFRESH COMPLETE

        START WITH to_date(to_char(sysdate+1, 'dd-mm-yy') || ' 06:00:00', 'dd-mm-yy hh24:mi:ss')

        NEXT to_date(to_char(sysdate+1, 'dd-mm-yy') || ' 06:00:00', 'dd-mm-yy hh24:mi:ss')

        AS select * from <snapshotSourceTable>@<DbLinkName>;

Example



TABLESPACE USERS

STORAGE (INITIAL100K NEXT50K PCTINCREASE0)

REFRESH COMPLETE

START WITH SYSDATE

NEXT TO_DATETO_CHAR(SYSDATE + 1, 'dd-mm-yy') || ' 06:00:00', 'dd-mm-yy hh24:mi:ss')

AS SELECT * FROM snapshotServerTable@link;

P.S

1: 刪除 Snapshot 

            

2: 更改 Snapshot Refresh 時間

1. 此 SQL 語句的意思:設定oracle自動在30秒 ( 30/24*60*60 ) 後進行第一次完全刷新,

以後每隔1天完全刷新一次。


Start with sysdate+1/2880 next sysdate+1;

2.此 SQL 語句的意思为:設定 Oracle 自動在1分鐘 ( 1/24*60 ) 後進行第一次快速刷新,

以後每隔10分鐘 ( 10/24*60 ) 快速刷新一次。


Start with sysdate+1/1440 next sysdate+1/144;

 

3: 查詢 Snapshot 相關資訊


SELECT * FROM dba_snapshots
SELECT * FROM dba_snapshot_logs

4: materialized view 與 snapshot 區別

參考:

http://77857.blog.51cto.com/67857/179913

http://www.dotblogs.com.tw/ricochen/archive/2009/09/22/10737.aspx

http://py3939.pixnet.net/blog/post/25399529-create-materialized-view

http://blog.xuite.net/yuyuante/stock/11287925

它們之間的區別就是沒有區別,只不過,一個名詞是新的,一個名詞是舊的。

物化視圖(materialized view)=快照(snapshot)。

在新系統下,曾經用“快照”的情況,現在就用“物化視圖”好了。

描述:

MV跟Snapshot的功能類似, SQL Navigator down出來也是snapshot ,但是底層還是有不一樣的地方.請搞清楚是MV還是Snapshot

結論:
(1) Snapshot與MV是同義詞.創建完畢導出的dll文件說明是snapshot.
(2) MV log是與Refresh的方式有關. Fast方式才需要LOG.
(3) MV是新名詞, snapshot是舊名詞而已.僅僅為了保持兼容性
The keyword SNAPSHOT is supported in place of MATERIALIZED VIEW for backward compatibility.

用 COMPLETE 的方式, 每次都抓全部資料, 適合資料量不多的狀況.
如果用 FAST 的方式 (即增量抓取) 抓資料, 是每次只抓新的資料. 適合資料量多的狀況.
因此 DBA 希望請你們提供 view(table) 的大小, 以便判斷適合用 COMPLETE 或是 FAST 的方式.