[ Tale @ 27.07.2006. 11:00 ] @
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? |
[ Tale @ 27.07.2006. 11:00 ] @
[ DarkMan @ 28.07.2006. 20:04 ] @
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. [ DarkMan @ 28.07.2006. 20:48 ] @
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. [ Tale @ 31.07.2006. 08:23 ] @
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 [ DarkMan @ 31.07.2006. 14:44 ] @
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). Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|