La risposta è discusso qui: http://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069
Nel caso in cui link non funziona:
errore:
ORA-02069: global_names il parametro deve essere impostato su TRUE per questa operazione
Causa:
Si sta cercando di rendere il funzionamento DML sul database remoto utilizzando la funzione locale.
Questo è il "bug Oracle", dovrebbe funzionare ma non è così.
Esempio (per una migliore comprensione):
-Assume che abbiamo due basi di dati DB1 e DB2
-Su DB1 abbiamo funzione fun1
create function fun1 return number is
begin
return 1;
end;
-Su DB1 abbiamo un collegamento al database che si riferisce a DB2 ha chiamato, per semplicità, DB2.
-Verifica che funzioni.
select *
from [email protected]
-Se l'output è il seguente, quindi funziona.
DUMMY
-----
X
di creare la tabella di prova in DB2 (la connessione al database DB2) -Let
create table tesTable(
id number,
testColumn number
);
-Let di fare qualche operazione DML, che dovrebbe causare questo errore ORA-02069.
insert into [email protected](id,testColumn)
values(1, fun1);
“ORA-02069: global_names parameter must be set to TRUE for this operation”
Ora, quando sai già in quale situazione si verifica questo errore, scriviamo la soluzione. Ha due soluzioni:
soluzione one:
- Impostare il parametro global_names su true, si può fare a livello di sistema o al livello di sessione (si pensi che il livello di sessione a volte non è disponibile)
--Sulla DB1
alter session set global_names=true;
- Creare il collegamento al database nel database remoto, nel nostro caso su DB2, che farà riferimento al database DB1 (rendere il nome del collegamento uguale al nome globale del database, poiché l'impostazione del parametro global_names su true lo richiede).
-Su DB2
Create database link DB1 connect to <username> identified by <password>
using ‘DB1’;
Ora dovrebbe funzionare, ma devo dire che la creazione di database link non può essere preferibile,
perché non è sicuro (Si dovrebbe indovinare perché, a causa se lo fai, sarai in grado di connettersi a DB1 con DB2 con qualche utente attraverso il collegamento del database ... se non è importante per te allora usaloJ).
Soluzione due:
- Creare tabella temporanea nel database locale.
- Inserire la riga nella tabella temporanea.
- Inserire la riga temporanea dalla tabella temporanea nel database remoto.
- Elimina la riga temporanea. Si noti che questa soluzione è più lenta della prima. Ma risolve anche il problema ed è molto più sicuro. risposta
cosa stai cercando di fare (quali linee di codice), quando ottieni questo errore? –
Grazie per la risposta ... Sto cercando di inserire righe via dblink ... parte della mia istruzione sql è questo inserto in tmp_b_transfer_amt @ xl02 select (seleziona acc.acct_no da [email protected] ... – kupa
potresti post codice prima creazione di collegamenti DB usati? (per favore aggiungilo al post originale, non nei commenti) –