Ne pouvez pas créer de Lien de Base de données à distance DB Oracle DB
Nous avons un système de CRM dans notre société, qui utilise un base de données Oracle 11g. Il est développé par un fournisseur tiers.
Nous n'avons pas accès au serveur qui exécute le système CRM. Mais néanmoins, nous avons à travailler DBA connexion de données à notre disposition (SYS utilisateur). Il se compose de:
- IP du serveur: 172.1.2.3
- port: 1521
- SID: abc
- utilisateur: sys
- mot de passe: *
Nous pouvons l'utiliser pour accéder à la DB avec Oracle SQL Developer 3.1 (Connexions >> Propriétés)
Désormais partie des données doit être copié de la CRM-base de données dans une autres de base de données Oracle, qui se trouve sur un autre serveur.
À ma compréhension, j'aurais besoin de créer un lien de base de données dans ma base de données cible. J'ai essayé quelque chose comme ceci:
CREATE PUBLIC DATABASE LINK xxx CONNECT TO sys IDENTIFIED BY ***** USING 'MYTNSENTRY'
Mon tnsnames.ora est comme suit:
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc)
)
)
.... et mon auditeur.ora ressembler à ceci:
MYLISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.1.2.3)(PORT=1521))
))
SID_LIST_MYLISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=MYTNSENTRY)
(ORACLE_HOME=C:\somepath) # path to Oracle home of target DB
(PROGRAM=extproc)))
Est PROGRAMME=extproc le bon choix? Il ya un couple de d'autres programmes à choisir. Je ne pouvais même pas commencer à l'auditeur lsnrctl parce qu'il ne pouvait pas "la vérification de l'utilisateur", ou quelque chose. Ironiquement, l'auditeur-l'installation et le lien de base de données à un MS SQL server de travailler en douceur.
Maintenant, malgré l'absence de certaines informations essentielles sur le CRM système de bd, on peut toujours se connecter à la base de données dans SQL Developer. Ne devrait-elle pas être également possible de faire une connexion entre les deux Oracle DBs? Merci de m'aider avec l'installation et la création de la liaison de base de données.
----- EDIT: --------
Alex Poole soupçon m'a aidé à le faire fonctionner. J'ai utilisé
show parameters service_names;
pour obtenir le plein nom de service. Il a la forme abc.def, avec def étant le domaine. Ainsi donc, j'ai ajouté le nom de domaine alias TNS dans tnsnames.ora:
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc.def)
)
)
La connexion peut être testé avec tnsping MYTNSENTRY sur l'invite de commande de la cible serveur de base de données. Le tnsnames.ora est local. Cependant, j'ai supprimé toutes les modifications apportées à la "locale" auditeur.ora, depuis l'auditeur, en effet, réside sur le serveur CRM.
La commande SQL est essentiellement le même, mais maintenant, la connexion fonctionne:
CREATE PUBLIC DATABASE LINK xxx CONNECT TO some_user IDENTIFIED BY ***** USING 'MYTNSENTRY'
Je suis aussi vraiment sûr que vous ne voulez pas créer la DB lien que le sys utilisateur (ou, au moins, je ne le ferais pas...si seulement pour la sécurité du saké)
D'accord.
SYS
est très spécial dans Oracle et doivent être traitées avec une extrême prudence/attention.Je vais écho à ne pas le faire dans
sys
. Vous devez indiquer votre mot de passe; ce n'est pas un objet c'est une chaîne.Oui, le tnsnames.ora est de la "cible" DB. J'ai besoin de faire référence à un nom de service dans mon "créer un lien de base de données" SQL. Depuis je n'ai aucune information sur ce qui est en cours d'exécution sur le CRM-serveur, j'ai l'intention de créer ma propre Écouteur/TNS alias qui fournit un service. Que l'auditeur doit alors être utilisé pour accéder à la télécommande (=CRM) base de données. Merci pour l'astuce sur les questions de sécurité avec le sys utilisateur, je vais utiliser un autre utilisateur.
OriginalL'auteur user748261 | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
Vous l'ai dit la
SID
estabc
, mais dans votretnsnames.ora
vous avez leSERVICE_NAME
dans leCONNECT_DATA
section. Ils ne sont pas toujours la même chose - voir cette question, ou ce Demander à Tom de l'entrée. Vous n'avez pas dit quelle est l'erreur que vous obtenez, mais juste changer deSID =
peut faire une différence.La
listener.ora
, et en effet l'auditeur, sont sur le serveur qui héberge la base de données CRM, pas sur celui qui héberge votre "cible" de la base de données. Comme vous pouvez vous connecter à partir de SQL Developer, qui est apparemment déjà configuré. Letnsnames.ora
ne doivent être locales.Mais si vous connaissez la
service_name
pour la base de données CRM, vous pouvez sauter et utiliser le EZCONNECT syntaxe pour définir le tout dans le lien:Vérifier votre SQL Developer de configuration pour voir si c'est déjà en utilisant le nom du service, plutôt que de SID, et si non, vous aurez besoin de découvrir. Si vous aviez accès à la CRM server vous pouvez utiliser
lsnrctl
de trouver le nom du service qui y sont inscrits, mais comme vous ne semblez pas vous en aurez besoin pour vous connecter à la base de données et exécutershow parameters service_names
ouselect value from v$parameter where name = 'service_names';
.Vous avez besoin de plus de privilèges pour créer un lien public que privé, et le public est potentiellement moins sûr qu'elle expose votre base de données CRM pour n'importe qui sur votre cible. Donc, j'avais seulement les rendre publiques, si vraiment nécessaire, et quel que soit la façon de se connecter à une lecture seule compte si vous êtes en mesure de créer un.
Notez également que si votre base de données cible a
global_names
ensemble detrue
le lien de base de données nom doit correspondre au nom du service distant.oui je voulais dire le nom de service vraiment, je me disais que le format. J'ai mis à jour la réponse avec quelques liens et plus d'info. Veuillez ajouter l'erreur que vous voyez à votre question si, comme je le suis de prise de vue dans l'obscurité un peu!
J'ai édité mon post d'origine. Vous pouvez avoir tir dans le noir, mais vous avez raison :-). J'espère que mon édition de préciser comment la solution a fonctionné.
OriginalL'auteur Alex Poole
Non seulement devez-vous PAS vous connecter en tant que SYS sauf en cas de nécessité, vous pouvez vous connecter en tant que SYS-dessus d'un lien de base de données.
OriginalL'auteur DCookie