2009-08-12 5 views
2

私は2つのOracleデータベース(AとB)の間のインタフェースを別々のハードウェアに構築しています。私は、データベースAのコード内のデータベースBの列を参照するために、次のオプションに関するアドバイスを求めています(すべての変数に対してOracleの%ROWTYPE機能を使用しています)。Oracle Interface

*ハードな方法[email protected]%ROWTYPE

賛否

 Documents the code very well 

短所

 Ugly 

    TOAD debugger has issues with database links. 

データベースB VIEW.COLUMN%ROWTYPE

長所

 Clean looking 
    It’s the way we have always done it 

コンにおけるオブジェクトのデータベースAのビューを使用し

 Building on top of View can get overly complicated 
    It’s the way we have always done it 

Bのシノニム%のROWTYPE

プロ

It’s different 

コン

It’s different 
+0

大きな質問です! '%ROWTYPE'は素晴らしいものではありませんか? :) –

答えて

3

私は同義語のアプローチに行きます。

シノニムは、どこでもdatabase.schema.tableを使用するなどの問題を回避するように設計されたシンタックスシュガーです。誰かが同義語が何をしているのだろうかと疑問を抱く人は、データ・ディクショナリー内にあるので照会することができます。

つまり、このアプローチはビューを使用することとあまり変わりありません。ビューの上にある建物がテーブルの上にあるよりも複雑なのはなぜですか?私はビューは基本的にすべての列とリモートDBからすべての行を何もに参加することなく選択すると仮定しています。

+0

+1。私は同義語もお勧めします。シノニムが*別の*データベースのオブジェクトを参照していることを覚えている限り(オブジェクトがローカルデータベースに存在し、データディクショナリを見ているとは思わない人もいるかもしれません)。 :) –

+0

過去に私はビューに対するアクセス権を制限していなかったので、他のビューはビューの上に構築され、ビューは意図されていない領域に自分の道を見出していました。だから私はDBAの練習が悪かったため、複雑になっていました。 – caddis

1

でオブジェクトの位置のデータベースAにシノニムを作成するには、データベース・レプリケーションを使用する方法について考えたことがありますマテリアライズド・ビューなど彼らは独自のデータの保存されたスナップショットを持つことになりますよう

http://www.orafaq.com/wiki/Advanced_Replication_FAQ

この方法では、ダウンしているどちらのデータベースには、他に影響を与えます。

+0

マテリアライズドビューは非常にいいです。私は前にそれらを使用しましたが、主にパフォーマンスの問題に取り組んでいます。 – caddis

2

私はビューまたはマテリアライズドビューに向かう傾向があります。このようにして、列定義(データ型、長さ)がローカル・データベース上にあり、リモート・データベースが使用できない場合には大きな問題は発生しません。

11gにコードが再コンパイルされないようにいくつかの機能が追加されました。これは、オブジェクトレベルではなく、列レベルでいくつかの依存関係が存在することを意味します。それがデータベースリンク上のオブジェクトの同義語を使ってどのように動作するかは興味深いでしょう。

0

私は同義語を使用しますが、特定の接頭辞を持つすべての同義語を開始することができます。そのため、人々は「反対側」から何かにアクセスすることが分かります。シノニム名はオブジェクト名と正確に同じである必要はありません。

また、マテリアライズド・ビューを使用することもできますが、Oracleストリームがさらに優れている可能性があります。