it-swarm-eu.dev

Dotaz dvě databáze serveru SQL na dvou různých serverech

Předpokládejme, že mám dva databázové servery (DB-SERVER-1 & DB-SERVER-2) a na každém serveru je jediná databáze (DB1 & DB2). Oba jsou databáze SQL Server.

Je možné dotazovat obě databáze ve stejném příkazu nebo funkci T-SQL? Možná připojením k jednomu, pak získáním sady výsledků, poté připojením k druhému a získáním této sady výsledků. Pak provádíte spojení s oběma sadami výsledků?

Mohu to udělat z .NET nebo Java kód, ale chci to udělat striktně ze strany databáze. Je to vůbec možné?

6
MacGyver

Opravdu to můžete udělat, ale doporučuji proti tomu. Propojený server můžete vytvořit na DB-SERVER-1, připojuje se k DB-SERVER-2.

(Definice propojeného serveru je nastavena pomocí DBA. Obsahuje přihlašovací údaje ke vzdálenému serveru. Pokud chcete přihlašovací údaje zadat pokaždé sami, bude to openquery nebo openrowset příkaz.)

Poté můžete napsat dotaz pomocí konvence pojmenování čtyř částí následujícím způsobem, za předpokladu, že tento dotaz používáte na DB-SERVER-1:

select * 
  from DB1.dbo.YourTable a
  join [DB-SERVER-2].DB2.dbo.OtherTable b on b.ID = a.ID

Spojení mezi servery jsou známá problémy s výkonem. Udělal bych to pouze pro administrativní účely a rozhodně ne proti velkým souborům výsledků.

4
datagod

Upgradoval jsem datagodova odpověď , protože je technicky správné, jak toho dosáhnout. Nicméně bych učinil opačné doporučení. To znamená, že bych doporučil používat propojené servery pro to, co děláte. Důvodem je, že se vám zdá, že se ptáte na architekturu Federované servery používající techniky distribuovaného zobrazení oddílů .

Při architektuře je třeba implementovat mnoho pravidel a standardů. Je pravda, že propojené servery by neměly být hozeny do žádné kombinace pro připojení více než jedné sady výsledků serveru. Existují důvody, proč používat objekty a techniky ze správných důvodů.

Příkladem je, že jsem úspěšně použil Federované servery/Distribuovaná zobrazení ve scénáři VLDB, který vyžadoval více serverů. To je to, o čem tato technika je. Jedná se o pokročilé věci, takže je třeba předem varovat, ale odpovídá přesně na to, co musíte udělat, abyste správně používali propojené servery pro účely federovaných serverů/distribuovaných zobrazení.

Chtěl jsem, aby jeden server byl naším aktuálním rokem přepravních dat a potom dalších 2-7 let na dalších serverech pro archivaci. Potřeboval jsem použít více serverů kvůli objemu dat a využít nezávislé zdroje serverů pro každou sadu výsledků dotazu, v závislosti na roce požadavku.

Technologie distribuovaného zobrazení v motoru věděla, na který server má jít a získat výsledky. Z důvodu omezení kontroly. Je to drahé: ano; funguje to, jak je požadováno: ano. Jsou propojené servery stabilní: ano, ale museli jsme odpovídat za bod selhání. Takže to není nic, co nelze normálně naplánovat s podobnými požadavky.

Ujistěte se, že distribuované dotazy jsou správně navrženy a testovány na výkon a selhání.

V souhrnu: Možné, Ano; Ano, ano; Doporučeno, protože je potřeba pro federované servery a distribuované dotazy, Ano; Důrazně doporučujeme, ne bez důkladného porozumění a testování technik.

4
SnapJag