[20180529]克隆資料庫與dblinks注意.txt

lfree發表於2018-05-30

[20180529]克隆資料庫與dblinks注意.txt

--//在做資料庫克隆,一般情況下給開發做測試,要注意一個細節問題,就是資料庫內建立的dblink.
--//有可能導致一些異常情況,特別是國內環境生產資料庫與測試資料庫沒有分開的情況下,很有可能導致
--//無意中竄改生產系統的資料.

--//還是透過例子說明問題:
1.環境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--//說明一下,現在許多dba或者開發習慣使用ezconnect模式配置dblink,這樣的好處不需要修改tnsnames.ora檔案.
--//特別在rac環境這種優勢更加明顯.因為rac要修改多臺機器的配置檔案.但是正是這樣,在克隆時也把dblink的配置
--//帶到克隆環境,如果你開發與生產環境沒有很好的隔離,很可能在克隆資料庫執行dml語句時,出發一些job做更新
--//別的資料庫的操作....
--//我先測試其它情況:

CREATE PUBLIC DATABASE LINK TEST
CONNECT TO SCOTT
IDENTIFIED BY book
USING 'test';

--//在tnsnames.ora配置如下:
TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.40)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bookdg)
    )
  )

SCOTT@book> select sysdate from dual@test;
SYSDATE
-------------------
2018-05-30 08:31:52

SCOTT@book> select INSTANCE_NAME from v$instance@test;
INSTANCE_NAME
----------------
bookdg

--//說明一下:IP=192.168.100.40是我測試資料庫的dataguard.

2.如果在dg上執行:
SCOTT@bookdg> select INSTANCE_NAME from v$instance@test;
--//掛起,因為在dg上沒有配置test的tns別名.假設配置如下:
TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = book)
    )
  )

SCOTT@bookdg> select INSTANCE_NAME from v$instance@test;
INSTANCE_NAME
----------------
book

--//這樣你克隆的機器實際上訪問不同的資料庫.而且有一些還與環境變數TNS_ADMIN有關.不再測試.
--//另外說明一下,我在dg上如果訪問的tns的別名的資料庫是10g的,會出現如下錯誤.
SCOTT@bookdg> select sysdate from dual@test;
select sysdate from dual@test
                         *
ERROR at line 1:
ORA-16000: database open for read-only access

--//因為dg只能以read only開啟.訪問11g的資料庫沒有問題.
--//另外如果sql語句出現2個訪問dblink的情況,也會報錯.參考連結:
http://blog.itpub.net/267265/viewspace-2138879/=>[20170511]DBLINK跨庫查詢遇到ORA-16000

3.繼續測試:
--//如果你使用ezconnect方式配置,這樣的好處不需要修改tnsnames.ora檔案.
--//特別在rac環境這種優勢更加明顯.因為rac要修改多臺機器的配置檔案.但是正是這樣,在克隆時也把dblink的配置
--//帶到克隆環境,如果你開發與生產環境沒有很好的隔離,很可能在克隆資料庫執行dml語句時,出發一些job做更新
--//別的資料庫的操作....

4.總之:
--//在做克隆時要注意這個細節,最好在引數檔案設定job_queue_processes=0,open_links,open_links_per_instance=0
--//確定那些dblink是否需要或者改正.不需要的刪除,尤其要重視ezconnect配置的dblink.避免出現意外.
--//還有1個習慣設定開發與生產系統的連線使用者口令不一樣,也一定程度減少這樣的錯誤.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2155317/,如需轉載,請註明出處,否則將追究法律責任。

相關文章