none
linked server insert hatası "Cursor operation conflict" RRS feed

  • Soru

  • ALTER PROCEDURE [dbo].[PSP_MERKEZE_TALEP_GONDER]
    AS BEGIN

    INSERT INTO PD.NDIRC.DBO.THT_ODEME_TALEP

    SELECT * FROM THT_ODEME_TALEP WHERE TALEP_NO NOT IN (

    SELECT TALEP_NO FROM PD.NDIRC.DBO.THT_ODEME_TALEP) AND DURUMU='BEKLIYOR'

    END

    PD adındaki linked server için select, update işlemlerimde problem yok, başka dataları da insert edebiliyorum. Ödeme talep tablosunda oluşturulan datada bir sorun var sanırım. Yukarıdaki prosedürü çalıştırdığımda aşağıdaki hatayı alıyorum.

    Yardımcı olabilirseniz memnun olurum. Teşekkürler.

    OLE DB provider "SQLNCLI10" for linked server "PD" returned message "Cursor operation conflict".

    Msg 7343, Level 16, State 2, Line 1

    The OLE DB provider "SQLNCLI10" for linked server "PD" could not INSERT INTO table "[PD].[NDIRC].[DBO].[THT_ODEME_TALEP]".



    21 Mart 2012 Çarşamba 09:35

Yanıtlar

  • Merhaba,

    Muhtemelen no count ozelliginiz ON durumdadir. Eger Server ozelliklerinden bunu kaldirirsaniz duzelecektir.

    Microsoft SQL Server Management Studio ile;

    1) Instance Isminizin Properties'ine girin. 

    2) Soldaki Select a page bölümünden Connections tab'ina gecin.

    3) Default connection options bolumunde no count satirindaki Check isaretini kaldirin.

    Query ile;

    USE master
    GO
    
    EXEC sp_configure 'user options', 0

     - Eski haline cekmek icin 0'i 512 yazarak degistirmelisiniz. Yani;

    USE master
    GO
    
    EXEC sp_configure 'user options', 512


    Kolay gelsin.


    http://www.yigitaktan.com

    21 Mart 2012 Çarşamba 10:10

Tüm Yanıtlar

  • Merhaba,

    Muhtemelen no count ozelliginiz ON durumdadir. Eger Server ozelliklerinden bunu kaldirirsaniz duzelecektir.

    Microsoft SQL Server Management Studio ile;

    1) Instance Isminizin Properties'ine girin. 

    2) Soldaki Select a page bölümünden Connections tab'ina gecin.

    3) Default connection options bolumunde no count satirindaki Check isaretini kaldirin.

    Query ile;

    USE master
    GO
    
    EXEC sp_configure 'user options', 0

     - Eski haline cekmek icin 0'i 512 yazarak degistirmelisiniz. Yani;

    USE master
    GO
    
    EXEC sp_configure 'user options', 512


    Kolay gelsin.


    http://www.yigitaktan.com

    21 Mart 2012 Çarşamba 10:10
  • Yiğit Bey,

    Problem çözüldü. Çok teşekkür ederim.

    Saygılar, iyi çalışmalar.

    21 Mart 2012 Çarşamba 10:27
  • Rica ederim.

    Yardimci olabildigime sevindim.

    Kolay gelsin.


    http://www.yigitaktan.com

    • Yanıt Olarak Öneren S. BALCI 13 Kasım 2012 Salı 23:17
    • Yanıt Önerisini Geri Alan S. BALCI 13 Kasım 2012 Salı 23:17
    21 Mart 2012 Çarşamba 10:28
  • Merhabalar nasılsınız, aşağıdaki konu hakkında araştırmalarıma rağmen çözüm bulamadım, sizden ricam konu hakkında beni yönlendirebilirmisiniz. iyi geceler dilerim.
    EXEC sp_addlinkedserver
    @server = 'test',
    @srvproduct = '',
    @datasrc ='192.168.10.73',
    @provider ='sqloledb'
    EXEC sp_addlinkedsrvlogin @rmtsrvname ='test',
    @useself ='False',
    @rmtuser = 'SBALCI',
    @rmtpassword ='123456789'
    Yukarıdaki kod ile Linked server oluşturdum ve aşağıdaki kod ile trigger oluşturdum fakat select yada insert işleminde srun olmadan data çekip kaydedebiliyorum. Lakin database'e program üzerinden kayıt yaptığım zaman SQLNCLI10 diye bir hata mesajı vermektedir. Bunu nasıl cözebilirim.
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "test" was unable to begin a distributed transaction.
    Çalışan insert kodu:
    INSERT [test].[OTOMASYON].[DBO].[GENEL] (CLIENT,COMPANY,PLANT,POTYPE,PRDORDER,MATERIAL)
    VALUES ('00','01','10','EN','12545','@MATERIAL')

    Çalışan Select kodu:
    select * FROM [test].[OTOMASYON].[DBO].[GENEL]
    Trigger:
    CREATE TRIGGER OTOMASYONISEMRI
    ON IASPRDORDER
    AFTER INSERT
    AS
    DECLARE @QUANTITY decimal, @POTYPE nvarchar(30),@PRDORDER nvarchar(30),@MATERIAL nvarchar(50),
    @CLIENT nvarchar(3),
    @COMPANY nvarchar(3),
    @PLANT nvarchar(3),
    @STATUS6 int
    SET @CLIENT = (SELECT CLIENT FROM inserted)
    SET @COMPANY = (SELECT COMPANY FROM inserted)
    SET @PLANT = (SELECT PLANT FROM inserted)
    SET @STATUS6 = (SELECT STATUS6 FROM inserted)
    SET @POTYPE = (SELECT POTYPE FROM inserted)
    SET @PRDORDER = (SELECT PRDORDER FROM inserted)
    SET @MATERIAL = (SELECT MATERIAL FROM inserted)
    SET @QUANTITY = (SELECT QUANTITY FROM inserted)
    BEGIN
    INSERT [test].[OTOMASYON].[DBO].[GENEL] (CLIENT,COMPANY,PLANT,POTYPE,PRDORDER,MATERIAL,QUANTITY,STATUS6)
    VALUES (@CLIENT,@COMPANY,@PLANT,@POTYPE,@PRDORDER,@MATERIAL,@QUANTITY,@STATUS6)
    END
    13 Kasım 2012 Salı 23:18
  • Öncelikle oluşturduğun linked server'i herhangi bir trigger içerisinde olmadan doğrudan Management Studio üzerinden örnek bir kayıt için "INSERT [test].[OTOMASYON].[DBO].[GENEL]" cümlesini test ettirmelisin. Eğer aynı hatayı alıyorsan;

    1 - Her iki sunucuda da yani bu linked sunucuyu tanımladığın makine 192.168.10.73 IP'li sunucuda MSDTC (Distributed Transaction Coordinator ) servisinin çalıştığından emin olmalısın.

    2  - Her iki makinenin birbirini gördüğünden emin olmalısın.

    3 - Gerekirse aşağıdaki ifadeler kullanılmalı.

    SET XACT_ABORT ON
    GO
    BEGIN DISTRIBUTED TRANSACTION

    ......


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    14 Kasım 2012 Çarşamba 07:53
  • Merhaba,

    Oncelikle kurulu olan SQL Server versionunuza gore degiskenlik gosteren bir case. Eger CU# veya SP gecmemisseniz, SQL Server 2005 veya 2008 uzerinde bununla alakali olarak bir hotfix mevcut. Client uzerinden SQLNCLI10 provider'ini kullanarak remote olarak transaction yapacaksaniz, oncelikle DTC'nin remote transaction icin konfigure edilmesi gerekmektedir. Bunun icin Win2K8 kullaniyorsaniz eger; 

    Start --> Program --> Administrative Tools --> Component Services 'a giriniz.
    Computers'i genisletip DTC isminize sag tiklayip ozelliklerine gecin.
    Burada Network DTC Access bolumunden Allow Remote Clients 'i secin.
    Transaction Manager Communication bolumundan ise Allow Inbound ve Allow Outbound'u secip oke leyin ve MSDTC'yi restart edin.

    Iyi calismalar.


    http://www.yigitaktan.com

    14 Kasım 2012 Çarşamba 07:53