Mostrando que pro sql*loader é EXATAMENTE A MESMA COISA, eis um exemplo nesse
mesmo ambiente que citei na msg anterior, com ORACLE_HOME e PATH setados, etc :
=> crio uma tabelinha no banco-destino :
SYSTEM@abobora::CNTNR=CDB$ROOT> create table EMPLOYEE
2 (
3 id number,
4 name varchar2(100),
5 dept varchar2(40),
6 salary number
7 );
Tabela criada.
SYSTEM@abobora::CNTNR=CDB$ROOT>
SYSTEM@abobora::CNTNR=CDB$ROOT>exit
=> Agora vou ter um arquivo de dados E um arquivo de controle para serem usados
com o sql*loader :
C:\Users\User 2am>type employee.txt
100,Thomas,Sales,5000
200,Jason,Technology,5500
300,Mayla,Technology,7000
400,Nisha,Marketing,9500
500,Randy,Technology,6000
501,Ritu,Accounting,5400
C:\Users\User 2am>type example.ctl
load data
infile 'employee.txt'
into table employee
fields terminated by ","
( id, name, dept, salary )
C:\Users\User 2am>
==> posso chamar o sqlldr CONECTANDO LÁ NO BANCO REMOTO com a host string
correta , de boa :
C:\Users\User 2am>sqlldr system/oracle@abobora control=example.ctl
log=employee.log bad=employee.bad
SQL*Loader: Release 19.0.0.0.0 - Production on Qua Mai 27 12:52:21 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Caminho usado: Convencional
Atingido o ponto de confirmação - contagem de registros lógicos 6
Tabela EMPLOYEE:
6 Linhas carregados com sucesso.
Verifique o arquivo log:
employee.log
para obter mais informações sobre a carga.
C:\Users\User 2am>type employee.log
SQL*Loader: Release 19.0.0.0.0 - Production on Qua Mai 27 12:52:21 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Arquivo de Controle: example.ctl
Arquivo de Dados: employee.txt
Arquivo de Incorreções: employee.bad
Arquivo de Descarte: nenhum(a) foi especificado(a)
(Permite todos os descartes)
Número a ser carregado: ALL
Número a ser ignorado: 0
Erros permitidos: 50
Array de ligação: 250 linhas, máximo de 1048576 bytes
Continuação: nenhum(a) foi especificado(a)
Caminho usado: Convencional
Tabela EMPLOYEE, carregada a partir de cada registro lógico.
Opção de inserção em vigor para esta tabela: INSERT
Nome da Coluna Posição Tam Term Incl Tipo de Dados
------------------------------ ---------- ----- ---- ---- ---------------------
ID FIRST * , CHARACTER
NAME NEXT * , CHARACTER
DEPT NEXT * , CHARACTER
SALARY NEXT * , CHARACTER
Tabela EMPLOYEE:
6 Linhas carregados com sucesso.
0 Linhas não carregado devido a erros de dados.
0 Linhas não carregado porque todas as cláusulas WHEN falharam.
0 Linhas não carregado porque todos os campos eram nulos.
Espaço alocado para o array de ligação: 258000 bytes(250 linhas)
Bytes do buffer de leitura: 1048576
Total de registros lógicos ignorados: 0
Total de registros lógicos lidos: 6
Total de registros lógicos rejeitados: 0
Total de registros lógicos descartados: 0
A execução começou em Qua Mai 27 12:52:21 2020
A execução foi finalizada em Qua Mai 27 12:52:22 2020
O tempo decorrido foi: 00:00:00.27
O tempo de CPU foi: 00:00:00.08
C:\Users\User 2am>
==> conectando lá no banco remoto E confirmando que tudo tá ok :
C:\Users\User 2am>sqlplus system/oracle@abobora
SQL*Plus: Release 19.0.0.0.0 - Production on Qua Mai 27 12:54:08 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Horário do último log-in bem-sucedido: Qua Mai 27 2020 12:52:21 -03:00
Conectado a:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SYSTEM@abobora::CNTNR=CDB$ROOT> select * from employee;
ID NAME DEPT SALARY
---------- -------------------- ------------------------------ ----------
100 Thomas Sales 5000
200 Jason Technology 5500
300 Mayla Technology 7000
400 Nisha Marketing 9500
500 Randy Technology 6000
501 Ritu Accounting 5400
6 linhas selecionadas.
SYSTEM@abobora::CNTNR=CDB$ROOT>
[]s
Chiappa
Em quarta-feira, 27 de maio de 2020 12:37:33 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
E só acrescentando, eu ** REPITO ** : vc só consegue conectar com o SID
indicado na variável ORACLE_SID ** para bancos LOCAIS **, como é o banco DEV
que vc diz ter na sua máquina - um banco REMOTO, residindo em OUTRA MÁQUINA, vc
ABSOLUTAMENTE TEM que ter uma entrada no arquivo TNSNAMES.ORA ** e ** deve
indicar essa entrada com @ em seja qual tool vc quer conectar... Entendo que é
POR ISSO que no banco DEV local aí seu vc consegue conectar SEM indicar
@hoststring , MAS não consegue no banco PROD remoto....Pra acessar esse banco
PROD remoto, repiuto, vc TEM que ter uma entrada corretamente apontando pra ele
no TNSNAMES.ORA e TEM que USAR essa entra com um @ na tool de conexão....
[]s
Chiappa
Em quarta-feira, 27 de maio de 2020 12:30:45 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
Na verdade não chame as entradas do TNSNAMES.ORA de "SID" porque elas não são
isso, ok ? Isso evita muita confusão de conceitos....Muito bem : se vc vai
acessar por uma tool de linha de comando um banco remoto (como é o seu caso)
não tem segredo, vc TEM que ter uma entrada apropriada para esse banco no
TNSNAMES.ORA (tomando o CUIDADO de confirmar que vc não tem em lugar nenhum
assignado valor pra variável TNS_ADMIN apontando pra algum lugar não-padrão) e
TEM que ter as variáveis ORACLE_HOME e PATH setadas apontando para ESSE home
aonde no diretório NETWORK/ADMIN vc tem o TNSNAMES.ORA correto.....Pra testar e
demonstrar que não tem NADA A VER a entrada no TNSNAMES.ORA com o SID, num
ambiente onde tenho 100% de Certeza que não há variável TNS_ADMIN setada, no
software client Oracle instalado em d:\oracledb19c (que inclusive é o client
que veio com um database local também instalado mas não importa) eu quero
configurar ele para acessar um database que reside na máquina de IP
192.168.10.20 e atendido por um listener ouvindo na porta 1521 com o
SERVICE_NAME XE, vou chamar a entrada de ABOBORA :
C:\Users\User 2am>SET ORACLE_HOME=d:\oracledb19c
C:\Users\User 2am>SET PATH=%ORACLE_HOME%\bin;%PATH%
C:\Users\User 2am>type %ORACLE_HOME%\network\admin\tnsnames.ora
# tnsnames.ora Network Configuration File:
D:\OracleDB19c\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1527))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ABOBORA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
C:\Users\User 2am>
C:\Users\User 2am>tnsping abobora
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on
27-MAI-2020 12:25:43
Copyright (c) 1997, 2019, Oracle. All rights reserved.
Arquivos de parâmetros usados:
d:\oracledb19c\network\admin\sqlnet.ora
Usado o adaptador TNSNAMES para resolver o apelido
Tentativa de contatar (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
192.168.10.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME
= XE)))
OK (90 ms)
==> muito bem, o LISTENER provado acessível pelo TNSPING, vamos efetivamente
conectar com essa entrada ABOBORA :
C:\Users\User 2am>sqlplus system/oracle@abobora
SQL*Plus: Release 19..0.0.0.0 - Production on Qua Mai 27 12:25:58 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Horário do último log-in bem-sucedido: Ter Mai 26 2020 16:49:31 -03:00
Conectado a:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
WHERE
--------------------------------------------------
CNTNR=CDB$ROOT
1 linha selecionada..
SYSTEM@abobora::CNTNR=CDB$ROOT>
==> faça EXATAMENTE esses testes aí na sua máquina que com certeza vc Consegue
conectar, ou então descobrir onde está teu erro....
[]s
Chiappa
Em quarta-feira, 27 de maio de 2020 11:37:10 BRT, Eduardo Perdomo
[email protected] [oracle_br] <[email protected]> escreveu:
Bom dia.
Esqueci de mencionar que SID, nesse exemplo são as entradas no TNSNAMES.ORA,
pois consigo acessar normalmente os dois bancos via sqlplus/navigator/dbexpress
etc.O problema é só no sqlldr que não reconhece a entrada do tbsnames, alias,
só está reconhecendo uma, como se fosse um default...
On Wed, May 27, 2020 at 9:37 AM Jose Laurindo Chiappa [email protected]
[oracle_br] <[email protected]> wrote:
Ah, só complementando : nessa toada de conectar via software client Oracle
(conexão jdbc thin é outra coisa, é conexão direta sem client Oracle) sem que
vc edite/monte um TNSNAMES.ORA na sua máquina, além de informar os dados de
conexão todos vc tem TAMBÉM as possibilidades de :
a) conexão via EZCONNECT, onde vc informa
usuario/senha@servername:port/instanceOUservice_name, vide How To: Perform a
direct connect to Oracle without a tnsnames.ora file
ou
b) vc pode setar a variável TNS_ADMIN apontando pra algum local da sua rede
onde alguém já criou um arquivo TNSNAMES.ORA 'público', todo mundo usa ele
Okdoc ??
|
|
| |
How To: Perform a direct connect to Oracle without a tnsnames.ora file
Technical Article Details : How To: Perform a direct connect to Oracle without
a tnsnames.ora file
|
|
|
Em quarta-feira, 27 de maio de 2020 09:23:40 BRT, Jose Laurindo Chiappa
<[email protected]> escreveu:
Blz ? Então, vamos por ordem aí : PRIMEIRO, o que vc informa depois do @
absolutamente *** NÃO É *** um SID, não : isso é uma ENTRADA DE HOST NO ARQUIVO
TNSNAMES.ORA, ok ??? NADA A VER, o SID é o identificador da instância, vc até
PODE conectar por ele (principalmente se ele for local) mas são coisas
Completamente Diferentes.... No seu caso, como vc está numa máquina que tem um
database Oracle local, com CERTEZA vc tem (no registry, provavelmente) uma
variável ORACLE_SID apontando pra esse banco DEV, E COMO EU DISSE, banco local
vc consegue conectar só por SID.... Mas como PROD é um banco remoto, vc NÂO TEM
COMO conectar só por SID, vc TEM que informar um @entradadotns , E TEM QUE
CRIAR a entrada correspondente no arquivo TNSNAMES.ORA, certo ?? repito,
conexão por SID é só para banco local, para banco remoto vc TEM que ter uma
entrada correspondente à esse banco no TNSNAMES.ORA e TEM QUE informar essa
entrada para as tools de conexão após um @ , blz ?
[]s
Chiappa
OBS : não que eu recomende se fazer isso mas para Informação, em algumas tools
Oracle (como sqlplus, por exemplo) até é possível vc ao invés de informar uma
entrada no TNSNAMES.ORA vc passar todos os detalhes da conexão, vide
https://asktom.oracle.com/pls/apex/asktom.search?tag=how-to-connect-sqlplus-without-tnsnamesora
por exemplo....
-----------------------------
Bom dia.
Estou tentando fazer um insert via sqlldr no oracle.
Tenho dois bancos, dev e prod, sendo dev no meu note e prod em outra máquina
Quando não especifico o sid no parametro userid=usuario/senha aponta para o
banco local dev
Quando especifico o SID como userid=usuario/senha@prod, não encontra o
banco do SID prod
Como tivesse como default o banco/sid dev.
Será alguma variável ?--
Eduardo Perdomo
Consultor de Implantação
Totvs - www.totvs.com..br
(21) 96845-8592
[email protected]
[email protected]
--
Eduardo PerdomoConsultor de ImplantaçãoGrupo PC Sistemas - www.grupopc.com.br
(21) [email protected][email protected]:
eduardo.perdomo.nom.br