Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Este artigo lista vários problemas que podem surgir ao configurar e utilizar um Oracle Publisher.
Surge um erro relativamente ao cliente Oracle e ao software de rede
Deve conceder à conta sob a qual o Microsoft SQL Server corre no Distribuidor permissões de leitura e execução para o diretório e todos os subdiretórios onde o software de rede cliente Oracle está instalado. Se não conceder as permissões ou se os componentes do cliente Oracle não estiverem instalados corretamente, recebe a seguinte mensagem de erro:
"A ligação ao servidor falhou com [Microsoft OLE DB Provider for Oracle]. Não foram encontrados componentes de rede e cliente Oracle. Esses componentes são fornecidos pela Oracle Corporation e fazem parte da instalação do software cliente Oracle Versão 7.3.3 ou posterior. O fornecedor não pode funcionar até que estes componentes sejam instalados."
Se instalar um cliente Oracle apropriado no Distribuidor, certifique-se de que para e depois reinicia o SQL Server após a instalação do cliente terminar. Esta etapa é necessária para que o SQL Server reconheça os componentes do cliente.
Se conceder as permissões e instalar corretamente os componentes, mas o erro persistir, verifique se as definições do registo em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI estão corretas:
Para Oracle 10g, as definições corretas são:
OracleOciLib = oci.dll
OracleSqlLib = orasql10.dll
OracleXaLib = oraclient10.dll
Para o Oracle 9i, as definições corretas são:
OracleOciLib = oci.dll
OracleSqlLib = orasql9.dll
OracleXaLib = oraclient9.dll
O SQL Server Distributor não consegue ligar-se à instância da base de dados Oracle
Se o SQL Server Distributor não conseguir ligar-se ao Oracle Publisher, certifique-se de que:
O software Oracle necessário está instalado no Distribuidor.
A base de dados Oracle está online e pode ligar-se a ela usando uma ferramenta como SQL*Plus.
A replicação de login usada para se ligar ao Oracle Publisher tem permissões suficientes. Para obter mais informações, consulte Configurar um editor Oracle.
O ficheiro tnsnames.ora lista os nomes TNS que definiste durante a configuração do Oracle Publisher.
Estás a usar o Oracle Home e o caminho corretos. Mesmo que tenha apenas um conjunto de binários Oracle instalado no SQL Server Distributor, certifique-se de que as variáveis de ambiente relacionadas com o Oracle Home estão corretamente definidas. Se alterar os valores das variáveis de ambiente, tem de parar e reiniciar o SQL Server para que a alteração tenha efeito.
Para mais informações sobre como configurar e testar a conectividade, consulte "Instalação e Configuração do Software de Rede Cliente Oracle no Distribuidor SQL Server" em Configurar um Publisher Oracle.
O Oracle Publisher está associado a outro Distribuidor
Um Oracle Publisher só pode estar associado a um distribuidor SQL Server. Se um distribuidor diferente estiver associado ao Oracle Publisher, retire-o antes de usar outro distribuidor. Se não eliminar primeiro o distribuidor, recebe uma das seguintes mensagens de erro:
"A instância do servidor Oracle '<OraclePublisherName>' foi previamente configurada para usar '<SQLServerDistributorName>' como seu Distribuidor. Para começar a usar '<NewSQLServerDistributorName>' como seu Distribuidor, deve remover a configuração atual de replicação na instância do servidor Oracle, o que irá apagar todas as publicações nessa instância do servidor."
"O servidor Oracle '<OracleServerName>' já está definido como publisher '<OraclePublisherName>' no distribuidor '<SQLServerDistributorName>.< DistributionDatabaseName>'. Elimine o publicador ou o sinónimo público '<NomeDoSinónimo>' para o recriar.
Quando se elimina um Oracle Publisher, os objetos de replicação na base de dados Oracle são automaticamente limpos. No entanto, em alguns casos, é preciso limpar manualmente os objetos de replicação da Oracle. Para limpar manualmente objetos de replicação Oracle criados por replicação:
Ligue-se ao editor Oracle com permissões de DBA.
Execute o comando SQL
DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.Emita o comando SQL
DROP USER <replication_administrative_user_schema>``CASCADE;.
O erro SQL Server 21663 é apresentado relativamente à ausência de uma chave primária
Artigos em publicações transacionais devem ter uma chave primária válida. Se não tiverem uma chave primária válida, recebe a seguinte mensagem de erro quando tenta adicionar um artigo:
"Nenhuma chave primária válida encontrada para a tabela fonte [<TableOwner>].[<TableName>]"
Para informações sobre os requisitos para chaves primárias, consulte a secção "Índices e Restrições Únicas" no artigo Considerações e Limitações de Design para Editoras Oracle.
O erro 21642 do SQL Server é gerado relativamente a um início de sessão duplicado para um servidor ligado
Quando configura inicialmente um Publicador Oracle, o processo cria uma entrada de servidor ligado para a ligação entre o Publicador e o Distribuidor. O servidor ligado tem o mesmo nome do nome do serviço Oracle TNS. Se tentar criar um servidor ligado com o mesmo nome, verá a seguinte mensagem de erro:
"Editores heterogéneos precisam de um servidor ligado. Já existe um servidor ligado chamado '<LinkedServerName>'. Por favor, remova o servidor ligado ou escolha um nome de editora diferente."
Este erro pode ocorrer se tentar criar o servidor ligado diretamente ou se anteriormente perdeu a relação entre o Oracle Publisher e o SQL Server Distributor, e agora estiver a tentar reconfigurá-la. Se receber este erro ao tentar reconfigurar o Publisher, remova o servidor ligado utilizando sp_dropserver (Transact-SQL).
Se precisar de se ligar ao Oracle Publisher através de uma ligação a um servidor ligado, crie outro nome de serviço TNS e, em seguida, utilize esse nome ao chamar o sp_addlinkedserver (Transact-SQL). Para informações sobre como criar nomes de serviços TNS, consulte a documentação da Oracle.
É gerado o erro 21617 do SQL Server
A Oracle publishing utiliza a aplicação Oracle SQL*PLUS para descarregar o pacote de código de suporte ao Publisher para a base de dados Oracle. Antes de tentar configurar o Oracle Publisher, o SQL Server verifica se o SQL*PLUS é acessível através do caminho do sistema no Distribuidor. Se o SQL*PLUS não puder ser carregado, é mostrada a seguinte mensagem de erro:
"Impossível correr SQL*PLUS. Certifique-se de que uma versão atual do código cliente Oracle está instalada no distribuidor."
Tente localizar o SQLPLUS no Distribuidor. Para uma instalação cliente Oracle 10g, o nome deste executável é sqlplus.exe. Normalmente é instalado em %ORACLE_HOME%/bin. Para verificar se o caminho do SQLPLUS aparece no caminho do sistema, examine o valor da variável do sistema Caminho:
Clique com o botão direito do rato em O Meu Computador e, em seguida, clique em Propriedades.
Clique no separador Avançado e, em seguida, clique em Variáveis de ambiente.
Na caixa de diálogo Variáveis de Ambiente , na lista de variáveis do Sistema , selecione a variável Path e depois clique em Editar.
Na caixa de diálogo Editar Variável do Sistema : se o caminho para a pasta que contém sqlplus.exe não estiver presente na caixa de texto Valor da Variável , edite a cadeia para a incluir.
Clica em OK em cada caixa de diálogo aberta para sair e guardar as alterações.
Se não conseguir localizar sqlplus.exe no Distribuidor, instale uma versão atual do software cliente Oracle no Distribuidor. Para obter mais informações, consulte Configurar um editor Oracle.
É gerado o erro 21620 do SQL Server
Se estiver a ligar-se a uma base de dados Oracle anterior à versão 8.1, a publicação Oracle exige que o software cliente Oracle instalado no Distribuidor seja da versão 9. Se estiver a ligar-se a uma base de dados Oracle versão 8.1 ou posterior, use o software cliente Oracle versão 10 ou posterior.
Antes de tentar configurar o Oracle Publisher, a Oracle Publishing verifica se a versão do SQL*PLUS acessível através do caminho do sistema no Distribuidor é a versão 9 ou posterior. Se não estiver, é mostrada a seguinte mensagem de erro:
"A versão do SQL*PLUS acessível através da variável Path do sistema não é suficientemente atual para suportar a publicação da Oracle. Certifique-se de que uma versão atual do código cliente Oracle está instalada no distribuidor."
Se tiver várias versões do software cliente Oracle instaladas no Distribuidor, certifique-se de que a versão mais recente é pelo menos a versão 9 e que a variável de caminho do sistema se refere primeiro a esta versão (referências a outras versões podem aparecer desde que a mais recente apareça primeiro). Para mais informações sobre como editar a variável de sistema PATH, consulte a secção "SQL Server is Raised" anteriormente neste artigo.
É gerado o erro 21624 ou o erro 21629 do SQL Server
Para distribuições de 64 bits, a publicação da Oracle utiliza o fornecedor OLE DB da Oracle para Oracle (OraOLEDB.Oracle). Certifique-se de que o fornecedor Oracle OLEDB está instalado e registado no Distribuidor. Se o fornecedor não estiver instalado e registado, verá uma ou ambas as seguintes mensagens de erro:
"Não foi possível localizar o fornecedor Oracle OLEDB registado, OraOLEDB.Oracle, no distribuidor '%s'. Certifique-se de que uma versão atual do fornecedor Oracle OLEDB está instalada e registada no distribuidor."
"A chave do registo CLSID que indica que o Fornecedor Oracle OLEDB para Oracle, OraOLEDB.Oracle, foi registado não está presente no distribuidor. Certifique-se de que o fornecedor Oracle OLEDB está instalado e registado no distribuidor."
Se estiveres a usar o software cliente Oracle versão 10g, o fornecedor é OraOLEDB10.dll; para a versão 9i, é OraOLEDB.dll. O fornecedor está instalado no %ORACLE_HOME%\BIN (por exemplo, C:\oracle\product\10.1.0\Client_1\bin). Se determinar que o fornecedor Oracle OLEDB não está instalado no Distribuidor, instale-o a partir do disco de instalação do software cliente Oracle fornecido pela Oracle. Para obter mais informações, consulte Configurar um editor Oracle.
Se o fornecedor Oracle OLEDB estiver instalado, certifique-se de que está registado. Para registar a DLL do fornecedor, execute o seguinte comando a partir do diretório onde a DLL está instalada, e depois pare e reinicie a instância do SQL Server:
-
regsvr32 OraOLEDB10.dllouregsvr32 OraOLEDB.dll.
O erro 21626 do SQL Server ou o erro 21627 é gerado
Para verificar se o ambiente de publicação Oracle está configurado corretamente, o SQL Server tenta ligar-se ao Oracle Publisher usando as credenciais de login que especificou durante a configuração. Se o SQL Server Distributor não conseguir ligar-se ao Oracle Publisher, verá a seguinte mensagem de erro:
- "Não é possível ligar-se ao servidor de base de dados Oracle '%s' usando o fornecedor Oracle OLEDB OraOLEDB.Oracle."
Se vir esta mensagem de erro, verifique a conectividade à base de dados Oracle executando SQL*PLUS diretamente, usando o mesmo login e palavra-passe especificados durante a configuração do Oracle Publisher. Para mais informações, consulte a secção "O Distribuidor do SQL Server Não Consegue Conectar-se à Oracle Database Instance" anteriormente neste artigo.
O erro SQL Server 21628 é levantado
Para distribuições de 64 bits, a publicação da Oracle utiliza o fornecedor OLE DB da Oracle para Oracle (OraOLEDB.Oracle). O SQL Server cria uma entrada no registo para permitir que o fornecedor Oracle corra em processo com o SQL Server. Se houver algum problema na leitura ou escrita desta entrada do registo, aparece a seguinte mensagem de erro:
"Não foi possível atualizar o registo do distribuidor '%s' para permitir que o fornecedor Oracle OLEDB OraOLEDB.Oracle corra em processo com SQL Server. Certifique-se de que o login atual está autorizado a modificar chaves de registo pertencentes ao SQL Server."
A publicação por oráculo exige que a entrada do registo exista e esteja definida para 1 para Distribuidores de 64 bits. Se a entrada não existir, o SQL Server tenta criá-la. Se a entrada existir mas estiver definida para 0, a definição não muda e a configuração do Oracle Publisher falha.
Para visualizar e modificar a definição do registo:
Selecione Iniciar e, em seguida, selecione Executar.
Na caixa de diálogo Executar, escreve regedit e depois seleciona OK.
Navegue para HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.
Em Providers, encontre uma pasta chamada
OraOLEDB.Oracle. Nesta pasta, localize o valor DWORD AllowInProcess com o valor 1.Se verificar que AllowInProcess está definido como 0, atualize a entrada do registo para 1:
Clique com o botão direito na entrada e depois selecione Modificar.
Na caixa de diálogo Editar String, introduza 1 no campo Dados do valor.
O erro 21684 do SQL Server é gerado
Se a conta de utilizador administrativo não tiver privilégios suficientes, verá a seguinte mensagem de erro:
"As permissões associadas ao login de administrador para o editor Oracle '%s' não são suficientes."
Para verificar as permissões concedidas ao utilizador, execute a seguinte consulta: SELECT * from session_privs. O resultado deve ser semelhante ao seguinte:
PRIVILEGE
------------------
CREATE SESSION
CREATE TABLE
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
Tem problemas de permissões no esquema do utilizador de replicação
O esquema de utilizador de replicação deve ter as permissões descritas em "Criar o Esquema de Utilizador Manualmente" em Configurar um Oracle Publisher.
Erro Oracle ORA-01000
A replicação utiliza cursores no Oracle Publisher durante o processo de adicionar artigos a uma publicação. É possível exceder o número máximo de cursores disponíveis no Publisher durante este processo. Se isto ocorrer, é apresentado o seguinte erro:
ORA-01000: número máximo de cursores abertos excedido
Para evitar este problema, certifique-se de que a definição de max_open_cursors nas bases de dados Oracle está definida para um número suficientemente alto (pelo menos 1000). Para mais informações sobre esta configuração, consulte a documentação da Oracle.
Erro Oracle ORA-01555
O seguinte erro da base de dados Oracle não está relacionado com a replicação de snapshots; está relacionado com a forma como a Oracle constrói vistas de dados com consistência em leitura:
"ORA-01555: Snapshot demasiado antigo"
Utilizando objetos conhecidos como segmentos de rollback, a Oracle constrói vistas de dados com consistência de leitura a partir do momento em que uma instrução SQL é emitida. Pode ocorrer um erro "snapshot too old" quando a informação de rollback é sobrescrita por outras sessões concorrentes. Antes do Oracle 9i, o método recomendado para reduzir a frequência deste erro era aumentar o tamanho e/ou número de segmentos de rollback e atribuir grandes transações a um segmento de rollback específico.
No Oracle 9i, a Oracle introduziu o conceito de espaço de tabela UNDO, que substitui o segmento de rollback. Para evitar o erro "snapshot too old" no Oracle 9i, recomenda-se que:
Crie um espaço de tabelas UNDO com uma quantidade adequada de espaço livre.
Defina a garantia de retenção no espaço de tabela (Oracle 10G e superior).
Configure os parâmetros de inicialização da Oracle UNDO_MANAGEMENT e UNDO_RETENTION.
Para mais detalhes sobre como evitar o erro "snapshot too old", consulte a documentação da Oracle.
Erro de oráculo ORA-22285
Se uma tabela incluir uma coluna BFILE, os dados dessa coluna são armazenados no sistema de ficheiros. Deve conceder à conta de utilizador administrativa da replicação acesso ao diretório onde os dados são armazenados, utilizando a seguinte sintaxe:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
Se não conceder acesso, o Agente Leitor de Registo gera o seguinte erro:
"ORA-22285: diretório ou ficheiro inexistente para operação FILEOPEN"
Alterações que exigem reconfiguração do Publisher
Se fizer alterações em tabelas ou procedimentos de metadados de replicação, deve eliminar e reconfigurar o Publisher. Para reconfigurar o Publisher, deve abandonar o Publisher e configurá-lo novamente usando o SQL Server Management Studio, Transact-SQL ou RMO. Para mais informações sobre a configuração do Publisher, consulte Configurar um Oracle Publisher.
Para eliminar um Oracle Publisher (SQL Server Management Studio)
Ligue-se ao distribuidor do Oracle Publisher no SQL Server Management Studio e expanda o nó do servidor.
Clique com o botão direito em Replicação e depois clique em Propriedades do Distribuidor.
Na página Publishers da caixa de diálogo Propriedades do Distribuidor, despeje a caixa de seleção do Oracle Publisher.
Clique em OK.
Eliminar um Publicador Oracle (Transact-SQL)
- Executa sp_dropdistpublisher. Para mais informações, veja sp_dropdistpublisher (Transact-SQL).