2011-12-27 10 views
5

Abbiamo un programma C# che è pianificato per essere eseguito nell'Utilità di pianificazione su Windows Server 2003, progettato per eliminare i file non aggiornati in una cartella in base alle informazioni tratte da più database Oracle. Sono in grado di eseguire l'applicazione manualmente e tutto funziona correttamente - ho effettuato l'accesso come utente con diritti amministrativi o effettuato l'accesso come utente dell'attività assegnata che dispone dei diritti degli utenti.Errore Oracle nell'Utilità di pianificazione

Quando l'utente compito viene disconnesso la macchina, però, l'applicazione fallisce in ogni database con uno dei due errori: o

ORA-12504: TNS: l'ascoltatore non è stato dato il SERVICE_NAME in CONNECT_DATA

o

ORA-12154: TNS: non ha potuto risolvere il contrassegno di collegamento specificato.

Tutti questi database utilizzano una stringa di connessione (recuperata da un altro, SQL Server, database) che, come detto in precedenza, si connette ed esegue correttamente quando viene utilizzata manualmente. Sono stato in tutto il Web alla ricerca di suggerimenti che potrebbero essere applicati a questa circostanza e non ho trovato una risposta definitiva.

C'è qualcuno che legge questo messaggio che potrebbe conoscere la risposta a questo problema? Tutti i suggerimenti sono i benvenuti.

+0

Quale metodo si utilizza per connettersi ai DB Oracle? OLE DB? ADO.NET? ODBC? – Yahia

+0

Siamo spiacenti, stiamo utilizzando OLE DB. –

+0

Utilità di pianificazione fornisce un ambiente di runtime che non è un "desktop completo" e OLE DB ha bisogno di un tale ambiente esp. per quanto riguarda le autorizzazioni ... per farlo funzionare utilizzare ADO.NET che funziona bene in tal caso ... – Yahia

risposta

2

Quale utente è l'attività pianificata impostata per l'esecuzione come? Uno degli stessi utenti che hai provato come, o un altro account?

Indipendentemente da ciò, non sembra un problema di autorizzazioni, così come non è stata impostata la variabile di ambiente ORACLE_HOME. (Sembra che il tuo programma stia probabilmente tentando di connettersi attraverso un file tnsnames.ora che non è stato trovato.) Potrebbe essere necessario che l'attività pianificata lanci prima un file batch che imposta l'ambiente, quindi continua a chiamare il tuo programma C#.

+0

Se si sta eseguendo manualmente questo .. mi chiedo se un processo batchfile se è in esecuzione da un processo batch può avere il i parametri della riga di comando sono incasinati, o le variabili di ambiente non vengono impostate o memorizzate correttamente tramite l'esecuzione del processo batchfile. eseguendo manualmente si penserebbe avrebbe gli stessi risultati .. controllare tutte le dipendenze dei file relative a quella operazione pianificata .. cosa succede se si punta al DB o server sbagliato nel file batch memorizzato .. ?? Forse è una stringa di connessione che punta a un server di test oa uno non esistente ... solo Q & A – MethodMan

+0

Anche questa è stata la mia prima impressione, ma non c'è alcun file TNSNAMES.ORA nel mix - è tutto fatto attraverso le stringhe di connessione.Ecco un esempio: DRIVER = {Oracle in Orahome}; DBQ = VPDEV1.WORLD; UID = web_app; PWD = web_app; –

+0

@MikePreston Per il collegamento delle stringhe è necessario un TNSNAMES.ORA o un server ONAMES, altrimenti non è possibile risolvere 'VPDEV1.WORLD'! – Yahia

2

Ho avuto problemi simili, ma con alcune app java. Lo stesso è accaduto: l'esecuzione manuale delle attività andava bene, ma l'esecuzione automatica è sempre fallita (stesso account!).

Controlla con il tuo amministratore (o forse puoi farlo tu stesso) e imposta l'app C# da eseguire dall'account amministratore (solo test!) O vedere se ci sono altre attività pianificate e interrogarle per vedere quali finestre account che usano e come è impostato. Ricordo che noi (I + admin) dovevamo sperimentare un po ', ma alla fine ha creato un nuovo account privilegiato (una copia di qualche altro esistente) per eseguire l'operazione pianificata.