none
Connessioni pendenti Sql Server 2008 RRS feed

  • Domanda

  • Ciao a tutti. Ho un problema un po' strano con Sql Server 2008 R2.

    Ho installato Team Foundation su un server con Windows Server 2008 e Sql Server 2008 R2. Stavo facendo dei test sulle procedure di backup e ripristino, ma sto incontrando un comportamento strano nelle finestre di esecuzione query da Management Studio.

    In pratica:

    - scelgo un DB su cui eseguire una query e premo il pulsante "Nuova query" (finestra A)

    - scelgo un altro DB e apro anche qui una nuova finestra di query (finestra B)

    - a questo punto se eseguo la stored procedure sp_who nella finestra A vedo che c'è una connessione in stato running  sul db B della finestra B, e mi sembra corretto perchè è la connessione della finestra di query

    - nella finestra B eseguo una qualsiasi query, ho provato sia con il mio script (che vi riporto sotto, preso comunque dall'MSDN per le procedure di backup di Team Foundation) sia eseguendo di nuovo una sp_who

    - torno nella finestra A, eseguo sp_who, e a questo punto vedo che sul db B ci sono *2* connessioni. Una di queste viene poi uccisa se chiudo la finestra di query, l'altra invece rimane in stato sleeping finchè non vado a ucciderla a mano con il comando kill (rimane anche a distanza di ore/giorni)

    Non credo sia corretto come comportamento, non vedo motivo per cui dovrebbe aprirmi una nuova connessione e poi lasciarla lì...anche perchè questo mi causa poi dei problemi quando vado a fare i test per il backup/ripristino, perchè il db viene visto in uso e non posso fare alcuna operazione finchè non uccido le connessioni a mano prima. Avete qualche idea o spiegazione? E' corretto come comportamento?

    Grazie mille a tutti per l'aiuto!

    Ecco lo script che eseguo e che causa lo stesso comportamento:

    --------------------------------

    USE TFS_Warehouse
    IF EXISTS(SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('Tbl_TransactionLogMark') AND type = ('U')) 
    BEGIN
    DROP TABLE Tbl_TransactionLogMark;
    END
    GO
    CREATE TABLE Tbl_TransactionLogMark
    (
    logmark int
    )
    GO
    INSERT INTO Tbl_TransactionLogMark (logmark) VALUES (1)
    GO


    IF EXISTS(SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('sp_SetTransactionLogMark') AND type = ('P')) 
    BEGIN
    DROP PROCEDURE sp_SetTransactionLogMark;
    END
    GO
    CREATE PROCEDURE sp_SetTransactionLogMark
    @name nvarchar (128)
    AS
    BEGIN TRANSACTION @name WITH MARK
    UPDATE dbo.Tbl_TransactionLogMark SET logmark = -(logmark)
    COMMIT TRANSACTION
    GO

    --------------------------------

    giovedì 15 marzo 2012 08:25