L'unica strada per affrontare il tuo (strano) problema mi sembra quello di abbassare il timeout della connection al db e testare tutti gli indirizzi in sequenza.
L'unica strada per affrontare il tuo (strano) problema mi sembra quello di abbassare il timeout della connection al db e testare tutti gli indirizzi in sequenza.
No MP tecnici (non rispondo nemmeno!), usa il forum.
questa è una strada. ma come ho detto preferirei evitarla.
primo, perchè non ho la certezza che i db sui vari indirizzi abbiano lo stesso nome dappertutto e purtroppo il db2 risponde al nome alias catalogato su ogni singola macchina e non ad un indirizzo ip e questo già sarebbe uno scoglio non da poco.
secondo, ho dei canoni di scrittura delle applicazioni e per quando esistano sempre le deroghe, se posso evitare di sparare nel buio per vedere dove colgo, preferisco ^^
quindi rinnovo la domanda:
come posso interrogare da delphi le catalogazioni dei nodi e database del DB2?
In quel caso, non vedo come tu possa risolvere: per poterti collegare a un DB, devi poterlo raggiungere e conoscerne il nome, e il DB deve averne uno specifico o noto, perché anche ammesso che tu possa ottenere un elenco dei DB disponibili - e sarebbe un incredibile problema di sicurezza, a mio parere - e anche il loro nome, e metti che ve ne sia più di uno che risponde da un certo indirizzo IP, devi avere una convenzione che ti consenta di scegliere a quali di questi ti devi collegare.Originariamente inviato da FengHuang
so gli indirizzi ip dei nodi ma non i nomi dei server.
Questo si risolve abbastanza facilmente: è sufficiente abbassare il timeout di connessione nel momento in cui cerchi di collegarti a un DB, mettendolo ad esempio a zero; se la connessione non avviene, passi all'altro nodo, altrimenti hai già la connessione aperta e pronta all'uso.Originariamente inviato da FengHuang
inoltre se provo a fare il connect ad un indirizzo "sbagliato" ci mette una vita prima di rispondermi che la connessione non è possibile quindi tentativo "alla cieca" vorrei evitarlo.
In tal caso, ti basta creare una mappatura con gli indirizzi IP e i nomi di server di database e associarli all'utente che acceda in modo che, a seconda dell'utente, ci si colleghi - o si provi a farlo - al database predestinato.Originariamente inviato da FengHuang
fino ad oggi l'applicazione chiede un parametro in ingresso che è il nome del DB a cui collegarsi.
oggi però si è aggiunta la terza opzione, ovvero l'esecuzione standalone dell'applicativo e volevo cogliere l'occasione per automatizzare la scelta del "puntamento" corretto in modo da tolgiere l'imbarazzo all'utente non proprio furbo.
Questi scenari si risolvono creando un'architettura multitier.Originariamente inviato da FengHuang
se è sulla lan, utilizzo un punto di accesso
se è su internet utilizzo un altro punto di accesso
altrimenti se non è proprio su nulla, utilizzo il db locale.
Secondo te, è più veloce ottenere i cataloghi e le informazioni esistenti da tutti i vari server piuttosto che cercare di collegarti con "timeout zero" al primo server - che ottimisticamente risponderà - o al successivo?Originariamente inviato da FengHuang 1
lo so anche io che potrei semlicemente "tentare" le connessioni e vedere se funzionano, ma come ho detto ci vuole troppo tempo e la trovo troppo "pressapoco" come modalità.
Fermo restando che una volta ottenuto l'accesso, la connessione devi aprirla comunque.
E aggiungendo inoltre che, benché un server si renda magari disponibile, potrebbe non esserlo più nell'istante successivo in cui si apre la connessione, dando luogo a vicoli cechi nella logica che stai cercando di implementare.
primo, Il nome devi averlo per forza, perché se ottieni i nomi dei DB disponibili su un server, poi devi sapere quale di questi è quello a cui ti devi collegare, supponendo che ve ne sia più di uno.Originariamente inviato da FengHuang
non ho la certezza che i db sui vari indirizzi abbiano lo stesso nome dappertutto
Qui si parla di software: non c'è un danno o un consumo strutturale se tenti di collegarti a un database e questo non risponde, per cui se questo tipo di operazione consente di verificare contestualmente alla connessione se un database è disponibile, e richiede meno tempo dell'ottenere cataloghi e informazioni estese su server e database, magari numerosissimi e a cui mai ti collegherai, allora è la soluzione giusta. Inoltre, la soluzione verso cui ti stai indirizzando è assolutamente non scalabile: all'aumentare del numero dei server diventerà sempre più lenta e ingestibile, al contrario di quelle che sono state proposte. Infine, è una scelta farraginosa che complicherà numerosi altri aspetti: non essere sicuri del database a cui ci si collega, l'impossibilità di stabilire delle priorità di database sullo stesso nodo o su diversi nodi.Originariamente inviato da FengHuang
secondo, ho dei canoni di scrittura delle applicazioni e per quando esistano sempre le deroghe, se posso evitare di sparare nel buio per vedere dove colgo, preferisco ^^
Il fatto di dire "non voglio provare a connettermi a un database perché voglio evitare di sparare nel buio" tecnicamente non ha alcun fondamento.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
quindi alla fine il succo è, non si può avere la lista dei db, corretto?
ovvero se volessi farmi un programmino semplice, di nessuna utilità che mi da la lista dei db non posso?
io fatico a crederlo, e non credo nemmeno sia un problema di sicurezza. dalla consolle del db2 non chiede ne utente ne password a fronte di un "list db directory"...
comunque, a parte questo, come lo setto un timeout in una connessione dbx? ho ravanato un po ma non l'ho trovata da nessuna parte come proprietà...
Propabilmente si può ma secondo me, come si legge in ciò che Alka scrive, andrebbe rivista l'architettura del software.
Quel programma è nato per una rete locale, non per andare in internet. Probabilmente riuscirai nel tuo intento ma ti troverai in certi momenti un programma estremamente lento quando ad esempio dovranno essere fatte query impegnative.
Secondo me per avere una situazione affidabile ed efficiente dovresti rivedere l'architettura o farlo usare in terminal server.
chiedo scusa, ma la facilità con cui consigliate la reingegnerizzazione di un software di cui non sapete quasi nulla, (che per Vs. informazione comprende circa 50 programmi, distribuiti su circa un migliaio di utenti dislocati in giro per l'italia) mi lascia abbastanza... perplesso.Originariamente inviato da denis76
Propabilmente si può ma secondo me, come si legge in ciò che Alka scrive, andrebbe rivista l'architettura del software.
Quel programma è nato per una rete locale, non per andare in internet. Probabilmente riuscirai nel tuo intento ma ti troverai in certi momenti un programma estremamente lento quando ad esempio dovranno essere fatte query impegnative.
Secondo me per avere una situazione affidabile ed efficiente dovresti rivedere l'architettura o farlo usare in terminal server.
volente o nolente la mia struttura è questa e con queste cose devo lavorare.
io apprezzo sempre i suggerimenti ma nel fatto specifico ho fatto una domanda tecnica.
che mi serva per fare un "helloworld" o per mandare in orbita lo shuttle, per come la vedo io, utente "terzo" che cerco di rispondere, dovrebbe importare poco. o so rispondere o non so rispondere.
poi posso parlare di filosofia, so perfettamente che il perfetto non esiste e che quindi su tutto c'è un'ampio margine di miglioramento, ma se chiedo a qualcuno se sa in che via è la banca di paperopoli perchè ho un appuntamento lì e questo mi risponde che la banca di topolinia è migliore, mi è poco utile... o sbaglio?
Su questo concordo perfettamente con te.Originariamente inviato da FengHuang
chiedo scusa, ma la facilità con cui consigliate la reingegnerizzazione di un software di cui non sapete quasi nulla, (che per Vs. informazione comprende circa 50 programmi, distribuiti su circa un migliaio di utenti dislocati in giro per l'italia) mi lascia abbastanza... perplesso.
[...]
poi posso parlare di filosofia, so perfettamente che il perfetto non esiste e che quindi su tutto c'è un'ampio margine di miglioramento, ma se chiedo a qualcuno se sa in che via è la banca di paperopoli perchè ho un appuntamento lì e questo mi risponde che la banca di topolinia è migliore, mi è poco utile... o sbaglio?
Infatti io commento l'idea da implementare per il meccanismo che vuoi inserire ex novo.
Prova ad aggiungereOriginariamente inviato da FengHuang
come lo setto un timeout in una connessione dbx?
ConnectTimeout=0
nella proprietà Params del componente TSQLConnection.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
ci ho provato ma mi ignora. ci prova comunque per 20 secondi![]()
Potresti per mezzo di thread avviare contemporaneamete tutte le connessioni e poi tenere quella che si completa per prima correttamente no?
se non trovo il modo di settare un timeout ne di ricavare la catalogazione questa idea mi garba assaiOriginariamente inviato da denis76
Potresti per mezzo di thread avviare contemporaneamete tutte le connessioni e poi tenere quella che si completa per prima correttamente no?![]()