[help] linked server

venerdì 18 luglio 2008 - 10.10

toyo86 Profilo | Junior Member

ciao a tutti..sono sempre io che vengo a rompere..

la mia domanda questa volta è:
è possibile creare dei linked server "temporanei" per creare un ambiente iniziale e poi cancellarli?
mi spiego meglio..sempre nell'ambito della tesi mi ritrovo a dover inizializzare il mio server con dati presi da un multi database (devo prendere dati da tabelle di database diversi di Access e creare un database sql unico). necessito quindi di scrivere un applicazione che in fase di installazione faccia questo(creazione di piu linked server e importazione dati..) ..e successivamente il programma che ho installato deve creare un nuovo linked server perchè l'aggiornamento deve avvenire pescando i dati da un database unico..

è possibile sfruttare il linked server di sql server o devo scrivere un applicazione che si colleghi a tutti i dati access?volevo sfruttare questa potenzialità..e inoltre..è possibile anche scrivere sempre nell'applicazione il periodo in cui dev'essere schedulato il processo di aggiornamento?(dopo che ho creato il job..)

grazie a chi mi da una mano e un saluto agli altri..

lbenaglia Profilo | Guru

>è possibile creare dei linked server "temporanei" per creare
>un ambiente iniziale e poi cancellarli?
Non esistono Linked Server temporanei, ma puoi sempre crearli ed eliminarli.
Però leggendo bene le tue esigenze, probabilmente puoi realizzare delle ad-hoc query utilizzando le funzioni OPENROWSET o OPENDATASOURCE.
In sostanza andrai a specificare tutti i parametri che hai definito nel linked server direttamente nelle query, evitando in questo modo di definire esplicitamente dei linked server.

Per maggiori dettagli consulta i Books Online:
http://msdn.microsoft.com/en-us/library/ms190312.aspx
http://msdn.microsoft.com/en-us/library/ms179856.aspx

>grazie a chi mi da una mano e un saluto agli altri..
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

SQL Server ha bloccato l'accesso all'oggetto STATEMENT 'OpenRowset/OpenDatasource' del componente 'Ad Hoc Distributed Queries' perché tale componente è disattivato in base alle configurazione di protezione del server. L'utilizzo di 'Ad Hoc Distributed Queries' può essere attivato dall'amministratore di sistema tramite sp_configure. Per ulteriori informazioni sull'attivazione di 'Ad Hoc Distributed Queries', vedere l'argomento relativo allo strumento Configurazione superficie di attacco nella documentazione in linea di SQL Server.

mi è stato ritornato l'errore..e non riesco a trovare come si configura (o meglio come si chiama l'opzione) di cui devo cambiare il settaggio...
il codice che eseguo è questo..

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\_STAGE\xxx.mdb; Integrated Secutiry=SSPI')...ANAGRAFICA

qualcuno mi sa aiutare?
queste query possono essere passate come parametri da un programma c#?grazie mille..

lbenaglia Profilo | Guru

>qualcuno mi sa aiutare?
Beh dai, il messaggio d'errore è chiarissimo e ti invita a leggere il paragrafo "Ad Hoc Distributed Queries Option" sui Books Online
http://msdn.microsoft.com/en-us/library/ms188313.aspx

Inoltre i BOL riportano "OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. When these options are not set, the default behavior does not allow for ad hoc access".

Quindi non devi fare altro che abilitare le Ad Hoc Distributed Queries via Surface Area Configuration oppure tramite l'opzione avanzata Ad Hoc Distributed Queries via sp_configure.
Inoltre devi impostrare 0 la chiave di registry DisallowAdhocAccess relativa al provider che intendi utilizzare (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers)...

>queste query possono essere passate come parametri da un programma
>c#?
No, gli argomenti di queste funzioni non sono parametrici.

>grazie mille..
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

>>queste query possono essere passate come parametri da un programma
>>c#?
>No, gli argomenti di queste funzioni non sono parametrici.

io intendevo se posso eseguire un comando "standard" come quello che ho scritto sopra come comando sql da un programma c#

ad esempio posso collegarmi a sql server da un programma scritto in c# con visual studio ed eseguire query standard..anche il tipo di query formate come quelle del messaggio precedente posso eseguirle?

lbenaglia Profilo | Guru

>io intendevo se posso eseguire un comando "standard" come quello
>che ho scritto sopra come comando sql da un programma c#
Allora si, dopo di tutto si tratta di un costrutto SQL

>ad esempio posso collegarmi a sql server da un programma scritto
>in c# con visual studio ed eseguire query standard..anche il
>tipo di query formate come quelle del messaggio precedente posso
>eseguirle?
Si.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

Inoltre devi impostrare 0 la chiave di registry DisallowAdhocAccess relativa al provider che intendi utilizzare (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers)...

è grave non avere questa impostazione??non compare proprio nel mio registry..
compare solo AllowInProcess..posso aggiungerla io?

lbenaglia Profilo | Guru

>è grave non avere questa impostazione??non compare proprio nel
>mio registry..
>compare solo AllowInProcess..posso aggiungerla io?

Prova senza, va? Non è grave
Non va? E' grave, aggiungila
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

adesso il mio dubbio è..
se la aggiungo devo aggiungere
valore stringa, binario, DWORD, QWORD, multistringa o stringa espandibile??

sono propenso al binario..

lbenaglia Profilo | Guru

>adesso il mio dubbio è..
>se la aggiungo devo aggiungere
>valore stringa, binario, DWORD, QWORD, multistringa o stringa
>espandibile??
>
>sono propenso al binario..
Io sono propenso a copiare l'impostazione da un altro provider (ad es. SQLNCLI), ovvero REG_DWORD, ma prima di fare una cosa del genere mi accerterei se ti serva davvero...
Hai provato senza?


--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member


Quindi non devi fare altro che abilitare le Ad Hoc Distributed Queries via Surface Area Configuration oppure tramite l'opzione avanzata Ad Hoc Distributed Queries via sp_configure.
Inoltre devi impostrare 0 la chiave di registry DisallowAdhocAccess relativa al provider che intendi utilizzare (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers)...


ho fatto tutto questo..ma non prende il riferimento al db..nel senso..mi da :

Impossibile inizializzare l'oggetto origine dei dati del provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato "(null)

quindi non mi collega il server (nel mio caso un file access senza nome utente ne pwd e presente..)

lbenaglia Profilo | Guru

>quindi non mi collega il server (nel mio caso un file access
>senza nome utente ne pwd e presente..)
Un utente c'è sempre e si chiama admin con password blank.
Questo è un esempio che punta alla tabella Students del database db1.mdb:

SELECT * FROM OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0' , 'Data Source=D:\Documenti\db1.mdb;User Id=admin;Password=;' )...Students;
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

situazione:
sql server express
registry settato con il valore suggerito prima a zero..

query eseguita

INSERT INTO [free].[dbo].[ANAGRAFICA] SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source = C:\_STAGE\base51_Wissembach.mdb; User=admin; Password=;')...[ANAGRAFICA];

e questo è l'errore...

Il provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato "(null)" ha restituito il messaggio "Impossibile trovare ISAM installabile.". Messaggio 7303, livello 16, stato 1, riga 1 Impossibile inizializzare l'oggetto origine dei dati del provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato "(null)".

e qua i linked server funzionano tranquillamente..

lbenaglia Profilo | Guru

>query eseguita
>
>INSERT INTO [free].[dbo].[ANAGRAFICA]
>SELECT * FROM
>OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
> 'Data Source = C:\_STAGE\base51_Wissembach.mdb;
> User=admin; Password=;')...[ANAGRAFICA];
>

1) Inizia dalle cose semplici, c'è sempre tempo per complicarle
Limitati ad una banale SELECT.

2) Io vedo il parametro "User" (inesistente) e non "User Id".

La query corretta sarà:

SELECT * FROM OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0' , 'Data Source=C:\_STAGE\base51_Wissembach.mdb;User Id=admin;Password=;' )...ANAGRAFICA;

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

ok..ci ho provato subito..e niente..stesso errore di prima..se invece faccio una semplice
SELECT * FROM ACCESS...ANAGRAFICA

dove access è un linked server tt ok..
proprio non capisco..

lbenaglia Profilo | Guru

>proprio non capisco..
Non dirlo a me...
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

cerco di cambiare strada..è possibile salvare un intera istanza di sql server?
cerco di spiegarmi..
visto che il programma che andro a sviluppare verrà installato su piu server e su ognuno le fasi saranno uguali, cioè multidatabase per inizializzare e file unico di aggiornamento..visto che non riesco a sfruttare gli opendatasource..posso già impostare dei linked server in modo che il mio codice non debba essere modificato e trova già i riferimenti?perchè poi non sarò io ad installare il prodotto, anzi non ne avrò piu nulla a che fare essendo uno stage per la tesi...

praticamente quando installo sql server sul server del cliente importare già la situazione che ho io in fase di sviluppo, quindi db con tabelle non popolate e linked server opportuni..

lbenaglia Profilo | Guru

>cerco di cambiare strada..è possibile salvare un intera istanza
>di sql server?
No.
Devi installare l'istanza e tramite script T-SQL farci "quello che ti pare".
Comunque IMHO ti stai perdendo in un bicchiere d'acqua...
Perché a me funzionano tranquillamente OPENROWSET e OPENDATASOURCE e a te no?
Non ti sarà sfuggito qualcosa?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

toyo86 Profilo | Junior Member

non riesco proprio a capire...ormai oggi la giornata è finita..lunedi riprovo da capo..seguendo passo passo anke i bol...vediamo...comunque mi sembra di aver fatto tutto..mah..

toyo86 Profilo | Junior Member

risolto...grazie!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5