Domanda

ho installato SQL Server 2008 R2 Sulla mia macchina (la mia macchina in esecuzione il server di Windows 2003) alcune delle tabelle all'interno del mio db sono fireing trigger (quando, si verifica inserto di eliminazione, aggiornamento) il risultato grilletto dovrebbe raggiungere un qualche processo (triggersReceiver.exe tramite memoria condivisa) che attende i trigger. il problema è che lo SQL Server 2008 R2 non riconosce questo processo l'errore che ottengo quando gli incendi di trigger: triggersReceiver.exe non è in esecuzione. ma lui è runing !!!!! è uno affrontato un problema simile prima ??

Questo è il codice che del "connettore di dll" la parte che viene eseguito quando mai un trigger viene attivato (Esegue codice tramite stored procedure estesa): tutte le funzionalità si trova in winbase.h (DLL di Windows)

////////Defenitions///////////////////////////////////////////////////////
#define XP_TRIGGER_SHARED_MEMEORY   L"Global\\xp_trigger_shared_memory"
#define XP_TRIGGER_PROCESS_EVENT    L"Global\\xp_trigger_process_event"
#define XP_TRIGGER_DONE_EVENT        L"Global\\xp_trigger_done_event"
////////////////////////////////////////////////////////////////////////////

Questa funzione restituisce FALSE (non so perché ...)

BOOL CTriggerGatewayConnector::Init()
{
::InitializeCriticalSection(&m_CS);

m_hMap = ::OpenFileMappingW(FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY);
if (m_hMap == NULL)
{

    return FALSE;
}

m_pSqlTrigInfo = (SqlTriggerInfo*)::MapViewOfFile(
                    m_hMap, FILE_MAP_WRITE, 0, 0,sizeof  (SqlTriggerInfo));
if (m_pSqlTrigInfo == NULL)
{
    return FALSE;
}

m_hProcess = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_PROCESS_EVENT);
if (m_hProcess == NULL)
{
    return FALSE;
}

m_hDone = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_DONE_EVENT);
if (m_hDone == NULL)
{
    return FALSE;
}

return TRUE;
}

Thnanks, Liran.

È stato utile?

Soluzione

Il problema risolto !!! In realtà era un problema di permessi. quando il trigger attivato si tenta di scrivere il file XP_TRIGGER_SHARED_MEMEORY E non è riuscito Qui: m_hMap = :: OpenFileMappingW (FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY); if (m_hMap == null) {    restituire FALSE; } il grilletto in realtà ha attivato la dll che è stato caricato al server SQL, e il server Sql non ha permesso (Teven attraverso la dll al suo interno) per scrivere AHE file di frammento.

al fine di risolverlo è necessario dare sql server le permmisions: Fare clic destro su Risorse del computer -> Gestione -> Servizi e Applicazioni -> Servizi: ForEach servizio SQL: (nella lista a destra) 1. Fare clic su di esso -> Proprietà -> LogOn Tab -.> Modifica account di sistema locale

La speranza che aiuterà somtime ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top