Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pokretanje upita nad više SQL servera / baza

[es] :: MS SQL :: Pokretanje upita nad više SQL servera / baza

[ Pregleda: 2869 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tale
Dejan Markovic
Mladenovac

Član broj: 26958
Poruke: 6
*.telekom.yu.



Profil

icon Pokretanje upita nad više SQL servera / baza27.07.2006. u 11:00 - pre 185 meseci
Imam upit koji uspešno radi nad jednom bazom na jednom serveru.
Problem je kako pokrenuti upit nad više servera i više baza na svakom od njih?

 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Pokretanje upita nad više SQL servera / baza28.07.2006. u 20:04 - pre 185 meseci
Nisam te najbolje razumeo.
Jel trebas da izvrsis jedan upit koji ce u jednom prolazu obraditi podatke sa razlicitih servera i razlicitih baza ili imas jedan upit koji hoces izvrsavati po jednom za svaku bazu pojedinacno na vise servera?

Za prvi slucaj mozes formirati jedan upit koji bi radio na jednom serveru nad vise baza tako sto ces pre imena tabela navoditi ime baze:
Code:

     select * from [baza1].[dbo].[tabel1] T1
     left join [baza2].[dbo].[tabel2] T2 on T1.ID = T2.ID

Da jedan upit u jednom prolazu obradi podatke sa vise servera jos nisam video i ne znam da li moze uopste.

Ako je drugi slucaj u pitanju, nisi rekao kako i u cemu izvrsavas upite.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Pokretanje upita nad više SQL servera / baza28.07.2006. u 20:48 - pre 185 meseci
Moze i join razlicitih tabela sa razlicitih servera.
Pre izvrsavanja upita se mora postaviti linked server.
Sledeci kod radi pod pretpostavkom da je ime drugog servera 'server2000' i da oba servera imaju login 'sa' a na serveru 'server2000' je za login 'sa' sifra 'sa'

Code:

-- ovim brisem stari login ako postoji
if exists(select 1 from master.dbo.sysservers where srvname = 'srv')
    exec sp_droplinkedsrvlogin @rmtsrvname = 'srv', @locallogin = 'sa'
go
-- ovim brisem linkovan server ako postoji
if exists(select 1 from master.dbo.sysservers where srvname = 'srv')
  exec sp_dropserver 'srv'
go

-- dodajem novi linkovan server
exec sp_addlinkedserver @server='srv', @srvproduct = '', @provider = 'SQLOLEDB', @datasrc = 'server2000'
go
-- dodajem login za linked server
sp_addlinkedsrvlogin @rmtsrvname = 'srv', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'sa'
go


I onda mozes izvrsiti upit (dodas ime servera ispred imena baze):
Code:

     select * from [baza1].[dbo].[tabel1] T1
     left join [srv].[baza2].[dbo].[tabel2] T2 on T1.ID = T2.ID

U zavisnosti od brzine veze ce ti zavisiti i brzina izvrsavanja upita.
 
Odgovor na temu

Tale
Dejan Markovic
Mladenovac

Član broj: 26958
Poruke: 6
*.telekom.yu.



Profil

icon Re: Pokretanje upita nad više SQL servera / baza31.07.2006. u 08:23 - pre 185 meseci
ovo je u pitanju
>>jedan upit koji hoces izvrsavati po jednom za svaku bazu pojedinacno na vise servera?<<

napravio sam neki kod ali ...

DECLARE @Server varchar(40)
DECLARE s_cursor CURSOR FOR

SELECT Naziv
FROM MyDB..Serveri
ORDER by Naziv

OPEN s_cursor

FETCH NEXT FROM s_cursor INTO @Server

WHILE @@FETCH_STATUS = 0
BEGIN
exec sp_addlinkedserver @Server
SELECT top 10 server_name as ime_servera,
database_name baza,
cast(cast(backup_size/1048576 AS int)as varchar(5)) + ' MB' as velicina,
type,
name,
user_name,
cast(datediff(n,backup_start_date,backup_finish_date) as varchar(5)) + ' min.' as Trajanje,
backup_start_date as pocetak,
backup_finish_date as kraj

from @Server+'.msdb.dbo.backupset' **ovde je problem. Ne mogu da dobijem na pr. test.msdb.dbo.backupset gde je test ime servera
**ime servera se nalazi u promenljivoj @Server
ORDER BY backup_finish_date desc
exec sp_dropserver @Server
FETCH NEXT FROM s_cursor INTO @Server
END

CLOSE s_cursor
DEALLOCATE s_cursor
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Pokretanje upita nad više SQL servera / baza31.07.2006. u 14:44 - pre 185 meseci
Tebi treba formiranje dinamickog sql upita. Na primer:

Code:


  declare @query varchar(4000)
  ...

  set @query = 'SELECT top 10 server_name as ime_servera,  database_name baza, ...
                          from ' + @Server + '.msdb.dbo.backupset  ORDER BY backup_finish_date desc'
  exec(@query)

  ...


Inace gore ti fali sp_addlinkedsrvlogin jer bez toga se ne moze povezati na remote server (tj. linked server).
 
Odgovor na temu

[es] :: MS SQL :: Pokretanje upita nad više SQL servera / baza

[ Pregleda: 2869 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.