Oi Adalberto, vou explorar mais ainda a dúvida sobre o EXP.. Você tá fazendo importação sem linhas e depois importando com um SELECT criado, digamos, "na marra".
Porque você não faz o import com linhas? Você deixa uma versão inicial do banco sempre atualizada com o sistema e pronta para ser exportada. E, se você puder e tiver tempo, mude pro Data Pump Export ao invés do export convencional (EXP). Ele é muito mais completo, performático, flexível e fácil de gerenciar problemas. Para tentar fazer funcionar do jeito que você já tá trabalhando, antes dos INSERTs, defina o charset igual ao do banco setando a variável de ambiente NLS_LANG, conforme o meu exemplo (de brincadeira) abaixo: C:\Users\Gleyson>set NLS_LANG='AMERICAN_BRAZIL.AL32UTF8'; E depois, no sqlplus: SQL> select * from nls_session_parameters; PARAMETER VALUE ------------------------------ ------------------------------ NLS_LANGUAGE AMERICAN NLS_TERRITORY BRAZIL NLS_CURRENCY R$ NLS_ISO_CURRENCY BRAZIL NLS_NUMERIC_CHARACTERS ,. NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD/MM/RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH24:MI:SSXFF NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF PARAMETER VALUE ------------------------------ ------------------------------ NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR NLS_DUAL_CURRENCY Cr$ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 17 rows selected. O client Oracle utiliza a variável de ambiente com o mesmo nome do parâmetro NLS para definir o seu valor. Aí, com o NLS_LANG batendo corretamente com o banco, creio que você tenha menos chance de ter problema. Isso é só um palpite mesmo, mas eu apostaria no Data Pump. Com isso você resolveria problemas com tipos mais elaborados, como BLOB também. Abraços. Atenciosamente, Gleyson Melo Em 30 de julho de 2010 10:43, Adalberto de Sousa Monteiro <asm...@gmail.com>escreveu: > Bom dia meu velho ... novamente, obrigado pela ajuda. > Vamos la... espero conseguir explicar ... > > A ideia seria "criar" o banco de dados via software, dessa forma executo da > minha base de desenvolvimento um EXPORT de um determinado Owner, gerando um > DMP com o parametro rows=N > > Exemplo da Linha de Comando: exp ophiuchus/sys...@xe file=c:\EXP_TA.DMP > log=c:\EXP_TA.LOG owner=ophiuchus compress=Y grants=Y indexes=Y triggers=Y > constraints=Y rows=N > > No sistema existem algumas tabelas padrões, exemplo, uma tabela de botoes. > Após o export, executo um select nessa tabela e crio um script com a linha > de comando INSERT para cada registro. > > Exemplo da Linha: INSERT INTO TABOTAO(DS_BMP, DS_CAPTION, DS_FONTE, > DS_HINT, > DS_LAYOUT, FL_ATIVO, FL_BLQSYS, FL_ENABLE, FL_FLAT, FL_FONTE_NEGRITO, > FL_SHOWHINT, FL_VISIVEL, ID_BOTAO, NM_BOTAO, QT_ALTURA, QT_COMPRIMENTO, > QT_FONTE_TAMANHO, QT_LARGURA, QT_ORDEM) VALUES ('CONFIGPROG.BMP', '', > 'ARIAL', 'CONFIGURAÇÃO DO PROGRAMA', 'BLGLYPHTOP', 'S', 'hExkYog/+ww=', > 'S', > 'S', 'S', 'S', 'S', 228, 'BTNCONFIGPROG', 5, 35, 8, 35, 0) > > Dessa forma, envio ao cliente os arquivos do sistema, um DMP e um arquivo > com todos os INSERT´s necessarios. > > O cliente seguiria a seguinte rotina: Instalar o Oracle XE (Next / Next), > definindo uma senha para o SYSTEM de seu banco. > Acessa o software que desenvolvi com a senha do SYSTEM e nele executo o IMP > do DMP, aonde serão criados todos os objetos sem nenhum registro. Ao > termino > executo o comando "EXECUTE DBMS_UTILITY.COMPILE_SCHEMA('USER');" no intuito > de compilar todos os objetos (Seria necessario? Nao sei, rs). > > Na sequencia, via sistema abro o arquivo TEXTO e começo a "pegar" linha a > linha (Insert) e executar nesse novo banco de dados. É nesse momento que > estou tendo problemas ....e somente com "alguns" caracteres, a principio > identifiquei que seria o " Ç ", pois outros registros foram inseridos, > tendo > " ~ ", exemplo. > > A versão do banco seria: > Oracle® Database Express Edition Getting Started Guide > 10g Release 2 (10.2) > B25610-01 > > Estive pesquisando "select * from nls_database_parameters" e obtive o > seguinte resultado: > > *PARAMETER* *VALUE* NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA > NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., > NLS_CHARACTERSET AL32UTF8 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR > NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM > NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT > HH.MI.SSXFF > AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR > NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE > NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 > NLS_RDBMS_VERSION > 10.2.0.1.0 > > Preciso alterar algo? Porque os registros na base original (de > desenvolvimento responsavel em gerar o DMP), foram inseridos sem erro e com > os caracteres especiais? E me gera erro somento no "insert" dos dados? > > Na base original, eu os inseri direto no banco de dados, na "mão". > > Abraços e um otimo final de semana a todos, > Adalberto > > > > Em 30 de julho de 2010 09:16, Gleyson Melo <gleysonm...@gmail.com> > escreveu: > > > > > > > Você pode fazer isso usando Export (preferencialmente Data Pump). Você > > exporta os dados pra um arquivo e importa no outro banco. Isso atenderia? > > Existe algum requisito a mais que impeça isso? Essa rotina vai ser > > executada > > automaticamente ou manualmente? > > > > Ah, qual a versão do seu banco? > > > > Abraços. > > > > Atenciosamente, > > Gleyson Melo > > > > Em 29 de julho de 2010 16:04, Adalberto de Sousa Monteiro > > > > <asm...@gmail.com <asm190%40gmail.com>>escreveu: > > > > > Fala rapaz, valeu pelo retorno. > > > > > > Então, aonde e como confiro o charset ? > > > > > > Estou utilizando o Delphi 7 com o componente de acesso ODAC, conhece? > > > > > > O estranho é que se eu pegar a linha de comando e executar via PL/SQL > > > Developer, funciona corretamente. > > > > > > Lembrando que essa linha de comando é gerada apartir de dados do mesmo > > > banco > > > de dados, ou seja, tenho um banco de dados de desenvolvimento, aonde > vou > > > inserindo alguns dados em tabelas funcionais ao sistema. Depois monto > uma > > > rotina que gera um TXT com base nessas tabelas montando a linha de > > comando > > > do INSERT. > > > > > > O que quero fazer é simplesmente retornar esses dados de volva ao > banco, > > > porem em um banco aonde as tabelas estão vazias. > > > > > > Abraços e obrigado, > > > > > > Em 29 de julho de 2010 14:50, Gleyson Melo <gleysonm...@gmail.com > <gleysonmelo%40gmail.com> > > > > > > escreveu: > > > > > > > > > > > > > > > Qual é o Charset do seu XE? Você baixou aquele básico? Unicode? > > > > > > > > Você tem que gerenciar o problema de Charset nas camadas de > comunicação > > > com > > > > o banco. > > > > > > > > Você pode considerar a geração de um arquivo texto e a carga dos > dados > > > > através de sql*loader, dependendo do seu problema. > > > > > > > > Que linguagem você tá usando? Tá usando que componentes diretamente > no > > > > código? ADO? > > > > > > > > Abraços. > > > > > > > > Atenciosamente, > > > > Gleyson Melo > > > > > > > > Em 28 de julho de 2010 15:56, Adalberto de Sousa Monteiro > > > > <asm...@gmail.com <asm190%40gmail.com> <asm190%40gmail.com > >>escreveu: > > > > > > > > > > > > > > > > > > > > > > > > > Pessoal, boa tarde. > > > > > > > > > > Estou desenvolvendo um programa para executar alguns "INSERT´s" em > > uma > > > > base > > > > > ORACLE. Estou utilizando Oracle XE e drive de acesso ODAC. > > > > > > > > > > Crio em tempo de execução um componente para Query : OraQryKey : > > > > > TOraQuery; > > > > > > > > > > Leio um arquivo texto aonde contem as sintaxes de INSERT. Cada > > sintaxe > > > eu > > > > > executo da seguinte maneira: > > > > > OraQryKey.SQL.Clear; > > > > > OraQryKey.SQL.Text := vs_Linha; > > > > > OraQryKey.Execute; > > > > > > > > > > Para algumas sintaxes, estou tendo como resultado o seguinte erro: > > > > > ORA-00917: missing comma > > > > > Essa é uma linha que me retorna o erro: INSERT INTO > > > > > TAENTIDADE_TEMP_LAYOUT(DS_COLUNA, FL_ATIVO, ID_LAYOUT, NM_COLUNA, > > > > > NM_TABELA, > > > > > NR_ORDEM) VALUES ('Complemento do Endereço', 'S', 12, > > 'DS_COMPLEMENTO', > > > > > 'TAENTIDADE_TEMP', 5) > > > > > > > > > > Caso eu altere o "Endereço" para "Endereco" e executo, > funcionamento > > > > > perfeitamente. > > > > > > > > > > Em outros casos, tenho o seguinte erro: ORA-00911: invalid > character > > > > > Quando a sintaxe esta dessa forma: INSERT INTO > TAPROGRAMA(DS_CAPTION, > > > > > DS_COLOR_TITULO, DS_HELP, DS_HINT, FL_ITEMDEC, ID_PROGRAMA, > > > NM_PROGRAMA, > > > > > NR_ITEMPRINC, QT_COMPRIMENTO_TELA, QT_LARGURA_TELA) VALUES > ('Iniciar > > / > > > > > Pausar Serviço', '$00FFB7B7', '', '', 'N', 10, 'FORM_STARTSTOP', 0, > > > 575, > > > > > 180) > > > > > > > > > > E quando altero para essa forma, funciona: INSERT INTO > > > > > TAPROGRAMA(DS_CAPTION, DS_COLOR_TITULO, DS_HELP, DS_HINT, > FL_ITEMDEC, > > > > > ID_PROGRAMA, NM_PROGRAMA, NR_ITEMPRINC, QT_COMPRIMENTO_TELA, > > > > > QT_LARGURA_TELA) VALUES ('Iniciar / Pausar Servico', '$00FFB7B7', > '', > > > '', > > > > > 'N', 10, 'FORM_STARTSTOP', 0, 575, 180) > > > > > Alterando somente o "Serviço" para "Servico". > > > > > > > > > > Alguem saberia me dizer porque? > > > > > > > > > > Porém outros "inserts" com caracteres desse tipo, vai numa boa, até > > > mesmo > > > > > para a mesma tabela, como o exemplo abaixo: > > > > > INSERT INTO TAPROGRAMA(DS_CAPTION, DS_COLOR_TITULO, DS_HELP, > DS_HINT, > > > > > FL_ITEMDEC, ID_PROGRAMA, NM_PROGRAMA, NR_ITEMPRINC, > > > QT_COMPRIMENTO_TELA, > > > > > QT_LARGURA_TELA) VALUES ('Manutenção de Ações', '$00FFB7B7', '', > '', > > > 'N', > > > > > 27, 'FORM_CADACAO', 0, 800, 410) > > > > > INSERT INTO TAENTIDADE_TEMP_LAYOUT(DS_COLUNA, FL_ATIVO, ID_LAYOUT, > > > > > NM_COLUNA, NM_TABELA, NR_ORDEM) VALUES ('DATA DA ULTIMA ALTERAÇÃO > DO > > > > > REGISTRO', 'N', 18, 'DT_ALTERACAO', 'TAENTIDADE_TEMP', 0) > > > > > > > > > > Utilizo para acesso o banco de dados o PL/SQL Developer e se > executo > > a > > > > > mesma > > > > > linha diretamente por ele, insere tranquilamente. > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > ------------------------------------ > > > > > > > > > > > ---------------------------------------------------------- > > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > > > inteira responsabilidade de seus remetentes. > > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > > > ---------------------------------------------------------- > > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > Procedure > > > » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: > > > http://www.oraclebr.com.br/ > > > ---------------------------------------------------------- > > > Links do Yahoo! Grupos > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > > -------------------------------------------------------------------------------------------------------------------------- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -------------------------------------------------------------------------------------------------------------------------- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure > » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: > http://www.oraclebr.com.br/ > ------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]