Sql Server - Linked...
 
Bildirimler
Hepsini Temizle

Sql Server - Linked Server Hk.  

Tuncay Güven
(@tuncayguven)
Üye

Merhaba Arkadaşlar,

Uzun aramalar sonucu internetten bir şey bulamadığım için sizden yardım talep ediyorum.

Sorun Şöyle: 100 tane sql servera linked server ile bağlı durumdayım. Hepsiyle aramızda metro eth olduğu için iç ip'ye ping atabiliyorum.

Kendi sql makinamda söyle bir kod çalıştırdığımda karşı tarafın ne kadar boş alanı kaldığını görebiliyorum. 

exec [192.168.xx.xx].DATABASE_ADI.sys.sp_spaceused @updateusage = 'FALSE', @oneresultset = '1';

Fakat yapamadığım dönen verileri herhangi bir tabloya, Geçici tabloya, yada değişkene atamıyorum Özetle hiç bir şeye atamadım.

 

YAPMAK İSTEDİĞİM tüm şubelerimi bir sorgu ile DB boş alanlarını yakalayıp bir tabloya yazdırmaktır. 

 

 

Denediklerim Örnekler aşağıdaki gibidir.

  • select * into #temp exec [192.168.xx.xx].DATABASE_ADI.sys.sp_spaceused @updateusage = 'FALSE', @oneresultset = '1';
  • insert bosAlan exec [192.168.xx.xx].DATABASE_ADI.sys.sp_spaceused @updateusage = 'FALSE', @oneresultset = '1';
  • OLE DB provider "SQLNCLI11" for linked server "192.168.xx.xx" returned message "Ortak hareket yöneticisi, uzak/ağ hareketleri desteğini devre dışı bıraktı.".
    Msg 7391, Level 16, State 2, Line 16
    The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "192.168.xx.xx" was unable to begin a distributed transaction.

 

- create table #test(gerekli bilgiler)

insert into #test (değerler) values (exec .....)

 

Yardımlarınız için teşekkürler

Tuncay GÜVEN

 

Alıntı
Topic starter Gönderildi : 14/12/2018 14:27
oldmember
(@yavuzfilizlibay)
Üye

Merhaba

İki farklı yöntemle bu hatayı gidebilirsiniz, ilk olarak client ve server tarafında Component services de, Distributed Transaction Coordinator'de Inbound ve outbound yetkilerini verebilirsiniz.

Veya, %windir%\system32\drivers\etc\hosts dosyalarında, server tarafında bağlanacağı clientların ip ve isimlerini aşağıdaki gibi girmeniz gerekiyor

192.168.1.1    hedefsunucuadi1.domain.local hedefsunucuadi1
192.168.1.2    hedefsunucuadi2.domain.local hedefsunucuadi2

...
 
CevapAlıntı
Gönderildi : 15/12/2018 06:08
Can Kaya
(@cankaya)
Üye Forum Yöneticisi

sp_spaceused i isteğinize göre konfigüre ettim. aşağıdaki script işinizi görecektir. Linkedserver name= PREPRODLSTR dö

 

DECLARE @spaceUsed TABLE (
[database_name] varchar(255) NULL,
[database_size] varchar(255) NULL,
[unallocated space] varchar(255) NULL)
DECLARE @pages bigint,@dbname sysname,@dbsize bigint,@logsize bigint,@reservedpages bigint,@usedpages bigint,@rowCount bigint

 

--------loop begin-------

select
@dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))
,@logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))
from
[PREPRODLSTR].[IB_GENEL].dbo.sysfiles

select
@reservedpages = sum(a.total_pages),
@usedpages = sum(a.used_pages),
@pages = sum(
CASE
-- XML-Index and FT-Index and semantic index internal tables are not considered "data", but is part of "index_size"
When it.internal_type IN (202,204,207,211,212,213,214,215,216,221,222,236) Then 0
When a.type <> 1 and p.index_id < 2 Then a.used_pages
When p.index_id < 2 Then a.data_pages
Else 0
END
)
from
[PREPRODLSTR].[IB_GENEL].sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
left join [PREPRODLSTR].[IB_GENEL].sys.internal_tables it on p.object_id = it.object_id

INSERT @spaceUsed
select
database_name = db_name(),
database_size = ltrim(str((convert (dec (15,2),@dbsize) + convert (dec (15,2),@logsize))
* 8192 / 1048576,15,2) + ' MB'),
'unallocated space' = ltrim(str((case when @dbsize >= @reservedpages then
(convert (dec (15,2),@dbsize) - convert (dec (15,2),@reservedpages))
* 8192 / 1048576 else 0 end),15,2) + ' MB')

--------loop end---------

select * from @spaceUsed

 

İyi çalışmalar...

 

CevapAlıntı
Gönderildi : 15/12/2018 08:07
Paylaş: