IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

DATABASE LINK + type Long et long raw ...


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut DATABASE LINK + type Long et long raw ...
    bonjour à tous,

    Je dois réaliser de la réplication de table d'une base ORACLE à une autre et y arrive fort bien à l'aide d'un DBLINK ...

    le seul problème est que le système refuse de copier la table si un des champs est de type LONG ou LONG RAW ... j'obtient en retour le charmant message qui suit :

    ERREUR à la ligne 1 :
    ORA-00997: Utilisation illégale du type de données LONG

    comment contourner le problème ?!

    merci @++

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Tu peux mettre le code que tu lances

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Oracle recommande cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    copy from scott/tiger@base_source to scott/tiger@base_cible -       
     append table_cible -       
    using select * from table_source;
    enjoy

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    merci tout plein merci

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    n'oublie pas le bouton résolu si ça marche

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Je ne mais pas résolu pour la simple et bonne raison que mon problème ne l'est pas :-( ...

    sous sql+ la requête tourne bien et dans mon script php j'obtient une instruction SQL non valide :-(


    Je viens de lire que visiblement la commande doit être exécutée manuellement !!! :-((

    Y a-t-il un moyen de l'automatiser avec php ?!

    merci @++

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    là j'en sais rien :/

    Peut être en faisant une procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE copy_tab IS
    EXECUTE IMMEDIATE ('copy from scott/tiger@base_source to scott/tiger@base_cible append table_cible using select * from table_source');
    END;
    Et execute copy_tab dans ton code PHP

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    pour le problème avec les types LONG le COPY seul ne passe pas au-dessus. mais j'arrive à contourner l'erreur avec un "SET LONG 2048" juste avant ...

    Quant au COPY : il s'agit visiblement d'une commande SQL+ et non SQL ce qui explique que j'arrive pas à l'executer sous php.

    Je pourrais utiliser sous php un EXEC("SQLPLUS COPY ....") mais j'ai lu que la commande COPY va disparaitre dans la prochaine version d'Oracle et SQL+ ... donc faut que j'oublie cette solution :-(

    Le problème avec les types LONG étant résolu je retente actuellement avec un DBLINK et des INSERT en fonction d'un select sur le lien ... mais le select sur le lien ne passe déjà pas :

    SQL> CREATE DATABASE LINK MONLIEN CONNECT TO NEWBIES IDENTIFIED BY XXXX USING 'BASEDISTANTE';

    Lien de base de données créé

    SQL> SELECT * FROM TABLETEST@MONLIEN;
    *
    ERREUR à la ligne 1 :
    ORA-12154: TNS : l'adresse symbolique n'a pas pu être résolue

    le TNSNAME.ora est bien configuré, un tnsping répond bien, et le lien est bien creé:

    SQL> select db_link from dba_db_links;

    DB_LINK
    --------------------------------------------------------------------------------
    MONLIEN
    1 ligne(s) selectionnée(s).


    Un collègue arrive visiblement à faire passer les mêmes commandes en local sur le serveur ... est-ce le problème ?!

    Si oui ... y a t-il des options ou paramètres à rajouter pour pouvoir les faire passer d'une machine distante ?!

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Peut tu vérifier plusieurs choses?

    1) Si le GLOBAL_NAMES est à true dans le fichier init.ora car si il est à TRUE le nom de ton lien de base de données doit correspondre au DB_NAME de ta base distante.

    2) Vérifie que le GLOBAL_NAME correspond à db_name.db_domain (tout se trouve dans ton init.ora ou bien lance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from GLOBAL_NAME;
    Si cela ne correspond pas lance la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE RENAME GLOBAL_NAME TO <db_name>.<db_domain>;
    3) Vérifie que tu arrive à te connecter à ta base distante avec la chaine de connexion

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    visiblement aucun GLOBAL_NAMES dans le init.ora donc GLOBAL_NAMES à FALSE ...

    sur un SELECT * FROM GLOBAL_NAME;

    je trouve bien

    NOMDEBASE.NOMDEDOMAINE

    J'ai essayé avec un lien ayant le même nom que le db_name et j'obtient la même erreure :

    ORA-12154: TNS : l'adresse symbolique n'a pas pu être résolue.


    ... par contre je viens d'apercevoir une autre bizarerie qui pourrais être embétante :

    au lancement d'SQL+ je peux me connecter à mabase1 ou mabase2 sans soucis.

    par contre si connecté sous sql+ sous mabase1 :

    SQL> CONNECT mabase2
    Entrez le mot de passe : ****
    ERROR:
    ORA-12560: TNS : erreur d'adaptateur de protocole

    y a-til un liens entre les 2 erreures ?!

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    je m'excuse :

    ça marche mieux comme ceci :

    sql> conn log/motdepasse@chaine

    et donc ... mes chaines de connection marche bien ... et pas les liens qui utilisent les mêmes chaines ...

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Pourrais tu essayer cette méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE DATABASE LINK CCMR CONNECT TO ANYADMIN IDENTIFIED BY ANYADMIN USING '(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.30.64.7)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
    (SERVICE_NAME = CCMR) 
    ) 
    )'

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    SQL>CREATE DATABASE LINK TESTLIEN CONNECT TO ANYADMIN
    2 IDENTIFIED BY ANYADMIN USING '(DESCRIPTION =
    3 (ADDRESS_LIST =
    4 (ADDRESS = (PROTOCOL = TCP)(HOST = ipduserveurdebdd )(PORT = 1521))
    5 )
    6 (CONNECT_DATA =
    7 (SERVICE_NAME = TESTLIEN )
    8 )
    9 )';

    Lien de base de données créé.

    SQL> SELECT * FROM tabledistante@TESTLIEN;
    *
    ERREUR à la ligne 1 :
    ORA-12514: TNS : le listener n'a pas pu résoudre le SERVICE_NAME figurant dans le descripteur de connexion

    SQL>

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Ah on avance

    remplace SERVICE_NAME = TESTLIEN
    par SID = TESTLIEN (ancien nommage 8i)

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    SQL> CREATE DATABASE LINK TESTLIEN CONNECT TO ANYADMIN IDENTIFIED BY ANYADMIN USING '(DESCRIPTION =
    2 (ADDRESS_LIST =
    3 (ADDRESS = (PROTOCOL = TCP)(HOST = ipserveurbdd)(PORT = 1521))
    4 )
    5 (CONNECT_DATA =
    6 (SID = TESTLIEN)
    7 )
    8 )' ;

    Lien de base de données créé.

    SQL> SELECT * FROM tabledistante@TESTLIEN;
    SELECT * FROM tabledistante@TESTLIEN
    *
    ERREUR à la ligne 1 :
    ORA-12505: TNS : le listener n'a pas pu résoudre le SID donné dans le
    descripteur de connexion

    SQL>

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    ah...

    dernier test avant grande recherche point par point peut tu remplacer le host par son ip?

    On est bien d'accord que testlien est le sid de ta base de données distante?

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    ... c la même erreure en plus vieux

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Bon donc pour résumer .

    Tu arrives sur ta base2 à te connecter sur ta base 1 en utilisant la chaine hote de ta base2 contenu dans ton tnsname.ora.

    GLOBAL_NAMES à false sur la base 2
    par contre GLOBAL_NAMES à quoi sur la base 1? et quel est son parametre GLOBAL_NAME?

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    oula oula attend ... suis désolé et mort de honte

    te fais chercher depuis 3 messages dans le vent ...

    le nom du lien que j'ai mis n'était pas le sid de la base :-(( ... désolé

    j'ai réayser avec ... et visiblement le select ne retroune pas d'erreur, et me renvoi le nombre de ligne selectionnée :-) ...

    vais donc pouvoir essayer avec un create table machin AS select ...
    ça devrais passer sans problème.

    tout mes excuses ... je te tiens au courant ...

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    LOOOOOOOOOOOOOL pas grave dis moi juste si ca marche avec le SID si oui tant mieux

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Type et variables, long en string MERCI à vous
    Par francky42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 24/04/2009, 11h02
  2. Database Link et Type
    Par MrJéjé dans le forum Administration
    Réponses: 1
    Dernier message: 04/01/2008, 15h45
  3. [oracle 9i] type de données long ora-00997
    Par Jonkile dans le forum Oracle
    Réponses: 6
    Dernier message: 20/08/2007, 10h09
  4. Réponses: 1
    Dernier message: 18/10/2005, 11h48
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo