Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Microsoft SQL Server 6.5 ou posterior fornece a capacidade de carregar e executar objectos COM (Component Object Model) personalizado através de um conjunto de automatização OLE procedimentos armazenados ou através de procedimentos armazenados expandido. Por predefinição, os objectos baseados em DLL COM são carregados como no processo de servidor, o que significa que os objectos COM não são carregados apenas dentro do espaço de endereços do SQL Server processo memória, mas também têm acesso total a este espaço de endereço de memória. Por conseguinte, um objecto COM carregados no espaço de processo do SQL Server tem aderem às mesmas regras que qualquer ficheiro DLL. Existe uma potencial que um objecto COM poderá substituir memória dentro dos do SQL Server processo ou fuga de recursos, provocando instabilidade.
Se suspeita que um objecto COM poderá estar a afectar a robustez do processo do SQL Server, poderá utilizar os passos neste artigo para instanciar o objecto COM o espaço de processo do SQL Server. Implementação do Distributed Component Object Model (DCOM) especificação de "Localização transparência" no sistema operativo forneceu a capacidade de executar um objecto COM baseados em DLL fora do espaço de processo do SQL Server.
O processo de executar um objecto COM baseados em DLL fora do espaço de endereços da aplicação principal é chamado sistema de interacção remota. Sistema de interacção remota requer executável outro processo substituto em vez do executável do SQL Server. A predefinição executável utilizada pelo DCOM Service Control Manager (RPCSS.exe) chama Dllhost.exe. A estrutura de suporte do DCOM utiliza o ficheiro Dllhost.exe para carregar a DLL para o espaço de processo e, em seguida, utiliza proxy/stub pares para organizar a interface pedida de forma transparente ao cliente, neste caso é o SQL Server. Este executável pode aceitar em simultâneo vários pedidos de interface/método. Depois de concluída a utilização de interface, o Gestor de controlo de serviço DCOM (SCM) gere a limpar cópias e descarregar do ficheiro Dllhost.exe. Objectos COM não devem ser esperados para manter informações de estado entre instâncias.
De forma a deste artigo para funcionar correctamente, o sistema tem de ter um sistema operativo do DCOM activado. Este seria o Microsoft Windows NT 4.0 Service Pack 2 ou posterior, Microsoft Windows 98 ou Microsoft Windows 95 com o suplemento DCOM instalado. Os seguintes passos podem aplicar a qualquer objecto DLL baseadas em COM que está a ser criado no espaço de processo do SQL Server, se é instanciado através de sp_OACreate ou um procedimento armazenado expandido.
Alterando a forma como o que invocar o objecto COM, pode pedir que o objecto ser criadas fora do espaço de endereço do SQL Server.
Se o objecto COM for carregado, utilizando o procedimento sp_OACreate , por predefinição este é carregado no processo. No entanto, existe um terceiro parâmetro opcional para este procedimento que pode que pode utilizar para indicar o contexto de onde pretende criar o objecto. Se este parâmetro não for especificado, a predefinição de cinco (5) é utilizado, que significa executar o objecto dentro ou fora do processo. Terá de alterar o parâmetro para quatro (4), que indica para o DCOM está este componente a ser executado como um executável local. Utilize sintaxe semelhante ao exemplo seguinte para informar explicitamente DCOM para executar o objecto COM "fora do processo" sp_OACreate a utilizar o procedimento armazenado:
DECLARE @object int
DECLARE @hr int
EXEC @hr = sp_OACreate 'SQLOLE.SQLServer', @object OUT, 4
Se o objecto COM é criado dentro de uma extensão procedimento armazenado o terceiro parâmetro de CoCreateInstance ou função CoCreateInstanceEx pode ser alterado para CLSCTX_LOCAL_SERVER. Este é apresentado no seguinte exemplo de código utilizando CoCreateInstance :
Modificar o registo para forçar o sistema de interacção remota do objecto
Se não é possível modificar o cliente COM a pedir que o objecto ser criadas fora do processo, existem dois métodos diferentes para forçar o objecto a ser criadas fora do processo.
Utilize o Visualizador de objectos OLE/COM (Oleview.exe) que é fornecido com o Microsoft Visual C++ e localize o ProgID sob a forma de OLEComponent.Object em Todos os objectos . Seleccione o objecto COM e, em seguida, no menu de objecto , seleccione CoCreateInstance sinalizadores . Certifique-se que apenas CLSCTX_LOCAL_SERVER está seleccionada. Em seguida, no Servidor InProc e implementação separadores seleccione Utilizar processos de substituição e deixar o "caminho para personalizar substituto" em branco, que permite que o ficheiro Dllhost.exe seja carregado e DLL COM apresentada dentro do respectivo espaço de processo.
Se não tiver o Microsoft Visual C++, o utilitário OLE/COM objecto Viewer também está disponível para transferência a partir do seguinte Web site da Microsoft:
Utilize os seguintes passos para actualizar manualmente o registo.
aviso Podem ocorrer problemas graves se modificar o registo incorrectamente utilizando o Editor de registo ou utilizando outro método. Estes problemas poderão forçar a reinstalação do sistema operativo. Microsoft não garante que estes problemas podem ser resolvidos. Modificar o registo por sua conta e risco.
Obter o identificador de classe (CLSID) do objecto COM. O CLSID é um número de 128 bits e considerada um identificador exclusivo global (GUID) que é utilizado para identificar exclusivamente o componente, módulo ou ficheiro que contém este objecto COM. Quando criar objectos COM utilizando a automatização OLE procedimentos armazenados, o primeiro parâmetro para o procedimento armazenado é um identificador de programação ou o ProgID do objecto OLE é utilizado para derivar o CLSID. Esta cadeia de caracteres descreve a classe do objecto OLE e tem o seguinte formato:
OLEComponent.Object
pode utilizar o identificador programático para localizar o identificador de classe para um objecto COM.
Abrir o Editor de registo (Regedit.exe) e sob a chave HKEY_CLASSES_ROOT utilize o método Localizar para localizar uma chave com o nome do seu <OLEComponent.Object>. Encontrará outros níveis, mas deve ser localizada no nível directamente abaixo de HKEY_CLASSES_ROOT. Depois de localizar a chave, expanda a pasta para o nome da chave e deverá ver uma subchave com o nome CLSID. Faça clique sobre essa pasta para ver os valores dentro dessa chave. No lado direito do ecrã é um título denominado "(predefinido)". Os dados para essa chave devem estar no seguinte formato:
{59F929A0-74D8-11D2-8CBC-08005A390B09}
Tome nota deste valor ou copiá-lo para o bloco de notas. Inclua os parênteses rectos.
Navegue na chave HKEY_CLASSES_ROOT\CLSID e localize a subchave com este número GUID. Depois de destaque a chave HKEY_CLASSES_ROOT\CLSID pode utilizar a função Localizar no Editor de registo (no menu Editar ) e cole o GUID na caixa de diálogo Localizar . Certifique-se de que tiver encontrado a interface correcta por examinar a subchave InprocServer32 abaixo desta chave, que aponta para a localização do ficheiro DLL COM. Se existir uma chave TypeLib, verifique este valor GUID. Este deve ser diferente do que anotou no passo 1. Caso contrário, terá o GUID TypeLib e não o GUID para o objecto COM. A subchave ProgID terá um valor de 'OLEComponent.Object.1'. Uma na extremidade destina-se apenas este exemplo e é utilizada para informações sobre a versão.
Enquanto subchave o GUID InprocServer32, certifique-se que existe um valor ThreadingModel e que é definido como qualquer ambos ou Free para garantir o empacotamento de referências compreende o modelo de thread do objecto COM para permitir a execução do COM espaço de processo do SQL Server. Se não for um valor ThreadingModel ou estiver definido para o compartimento, COM instâncias do objecto poderão não ser consistente.
Nota Se adicionar ThreadingModel valor Certifique-se de que o utilizador testa o objecto COM antes de implementar.
Realce a número/subchave GUID na chave HKEY_CLASSES_ROOT\CLSID. No menu Editar , clique em Novo e, em seguida, seleccione Valor da cadeia . Na coluna nome , escreva o seguinte:
AppID
Prima ENTER e, em seguida, insira o identificador de classe ou número GUID que tomou nota do passo 1 como o valor. O GUID deve estar dentro de chavetas, tal como no seguinte exemplo:
{59F929A0-74D8-11D2-8CBC-08005A390B09}
o identificador de aplicação AppID é utilizado pelo DCOM para associar a DLL de um ficheiro executável.
Adicionar uma nova subchave a HKEY_CLASSES_ROOT\AppID e defina o respectivo nome para o mesmo identificador de classe ou GUID com as chavetas como inserido no passo anterior.
Realce o nome GUID. No menu Editar , clique em Novo e, em seguida, seleccione Valor da cadeia . Na coluna nome , escreva o seguinte:
DllSurrogate
Deixe a coluna de dados em branco para este valor. Uma vez que a coluna de dados está em branco, isto informa o DCOM executar o ficheiro executável predefinido, Dllhost.exe e carregar o objecto COM no respectivo processo espaço.
Feche o Editor de registo. Clique em Iniciar e, em seguida, clique em Executar . Na caixa de diálogo Executar escreva o seguinte:
DCOMCNFG
Prima a tecla ENTER para abrir a caixa de diálogo Propriedades da configuração DCOM . Clique no separador Propriedades predefinidas e certifique-se de que Activar DCOM neste computador está seleccionada. Se não estiver, seleccione-lo e, em seguida, clique em Aplicar .
Certifique-se que a conta de utilizador do Microsoft Windows NT do SQL Server está a ser executado tem permissão "Full Control" nas chaves de registo para este objecto. Se as permissões não forem suficientes ou as chaves de registo são entradas incorrectamente os seguintes erros poderão ocorrer quando estiver a criar o objecto COM:
Informações de erro de automatização OLE HRESULT: 0 X 80040154 Origem: ODSOLE expandido procedimento Descrição: Classe não registada
Informações de erro de automatização OLE HRESULT: 0 X 80070005 Origem: ODSOLE expandido procedimento Descrição: Acesso negado.
Informações de erro de automatização OLE HRESULT: 0X80080005 Origem: ODSOLE expandido procedimento Descrição: A execução no servidor falhou
Teste e ver se este está a executar o ficheiro Dllhost.exe e carregar o objecto COM no respectivo espaço de processo. Isto requer que o Microsoft Windows NT Resource Kit está no computador Windows NT no qual o SQL Server está a ser executado. Abra uma linha de comandos e a partir da linha de comandos execute o ficheiro Tlist.exe, que mostra todos os processos e os respectivos identificadores de processos associado ou identificadores de processo (PID). No script Transact-SQL onde sp_OACreate é executado e depois dessa chamada é executada, mas antes de terminar o script, utilize o seguinte para atrasar a conclusão de script para uma mais 20 segundos:
WAITFOR DELAY '000:00:20'
executar o script e imediatamente navegue para a linha de comandos e execute o ficheiro Tlist.exe. Tenha em atenção Dllhost.exe PID. Volte a executar o Tlist.exe e passar o PID como um parâmetro. Apresenta as DLLs que são carregadas dentro do espaço de processo Dllhost.exe. O objecto COM baseados em DLL deverá estar listado como executar este processo. Depois do script regressa, executar novamente o Tlist.exe revela que o processo Dllhost.exe já não está em execução.
A saída de exemplo seguinte é criado o objecto ADODB.Connection fora do espaço de processo do SQL Server. Este instantâneo utilizando Tlist.exe efectuado enquanto o objecto COM existia no espaço de processo Dllhost.exe. Repare que o módulo Msado15.dll, que é o módulo que contém o objecto COM, é carregado.
com SQL Server versão 7.0 Desktop Edition em execução no Microsoft Windows 95 ou Microsoft Windows 98 estações de trabalho, "32-bit módulos carregado" na ferramenta de aplicação Microsoft informações de sistema pode ser utilizado durante a execução de Consulte loading\unloading do ficheiro Dllhost.exe e o objecto COM DLL durante este teste. Para aceder à ferramenta, clique em Iniciar , aponte para programas , aponte para Acessórios e, em seguida, clique em Ferramentas do sistema .
Nota Devido a limitações de segurança, Windows 95 ou Windows 98 não suporta iniciar um processo DLLSurrogate e carregar uma DLL COM por um cliente remoto. Assim, o objecto COM tem existe dentro ROT (com o objecto de tabela) e ser execução/carregado caso se trate de estar disponível para utilização por um computador cliente remoto. Pode utilizar os passos neste artigo para ajudar a isolar COM objectos quando estes são suspeita de estar a causar instabilidade no SQL Server. Certifique-se de que cada componente é testado exaustivamente a fora de processo para assegurar um comportamento consistente. Diferença de desempenho de um objecto COM no processo do SQL Server e fora do espaço de processo varia. Além disso, alguns objectos COM não foram criados para ser tornado remoto e podem divulgar recursos. Teste exaustivamente antes de implementar os passos neste artigo para algo que não seja um passo de resolução de problemas. O artigo Microsoft Knowledge Base seguinte tem um exemplo de como o sistema de interacção remota um objecto COM pode causar uma fuga de recursos:
197426
(http://support.microsoft.com/kb/197426/
)
CORRECÇÃO: Identificador fuga quando passar objectos ADO entre processos
Nota Microsoft SQL Server 6.5, por predefinição, funciona com o modelo de STA (single Thread Apartment) e processa a inicialização de objectos COM num thread separado interno. Neste modelo, está seleccionado um thread para controlar a criação de objectos OLE dentro de processo do SQL Server e proxy para todas as ligações de clientes que necessitam de acesso a este objecto COM. Porque é processado internamente pelo SQL Server, não é possível garantir a persistência do objecto entre instâncias do objecto COM.
Para obter mais informações sobre o modelo de objectos do SQL Server 6.5 COM, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
194661
(http://support.microsoft.com/kb/194661/
)
Modelo de persistência do SQL Server COM objectos
Para obter mais informações sobre a forma como o Sp_OA procedimento armazenado é implementado, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
180780
(http://support.microsoft.com/kb/180780/
)
Como é implementado Sp_OA procedimentos extensão para SQL Server
Para obter mais informações sobre como executar baseados em DLL COM objectos de substitutos de DLL; consulte o seguinte:
Eddon, Guy; Eddon Henry, no interior Distributed Com (Mps). A Microsoft Press, 1998, (ISBN 1-57231-849-X), capítulo oito: ' DLL substitutos e dos componentes do executável
Caixa, Don, COM Essential . Addison-Wesley Pub. Co., (ISBN 0-201 63446 de 5) capítulo seis: 'Aplicações' Grimes Richard, Professional DCOM de programação . Wrox Press Inc. (ISBN 1-861000-60-X), capítulo 4: 'Distributed Component Object Model' O DCOM Add-in para o Windows 95 é fornecido com o suporte de dados SQL Server 7.0 e o ficheiro chama DCOM95.exe. Pode transferir DCOM95.exe a partir do seguinte Web site:
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 198891
(http://support.microsoft.com/kb/198891/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.