Mais

Como configurar um ArcMap Relate com uma tabela do MS SQL Server 2012

Como configurar um ArcMap Relate com uma tabela do MS SQL Server 2012


Esta é minha primeira vez trabalhando com dados diretamente do MS SQL Server 2012, e não tenho certeza se posso usá-los em um Relate no ArcMap.

Eu tenho uma tabela no MS SQL Server, que trouxe para o ArcMap através da opção Database Connections. Quando eu adiciono esta tabela ao ArcMap usando o botão Add Data padrão, uma caixa de diálogo New Query Layer aparece:

ArcMap requer um campo de identificador único, entretanto esta tabela não possui um. Escolhi um dos campos existentes, embora não seja único (o primeiro problema?).

Agora posso visualizar a tabela no ArcMap e configurar um Relate entre esta tabela e uma classe de recursos, com base no campo BoreholeID correspondente.

No entanto, quando eu seleciono um furo de poço na classe de recursos ou uma linha na tabela, o Relate é exibido, mas esmaecido:

  • Posso usar uma tabela do MS SQL Server Management Studio em um ArcMap relacionado?
  • Em caso afirmativo, a causa do problema é a falta de um campo de ID exclusivo?
  • Se não, o que mais poderia estar causando o problema?

O ArcGIS faz uso frequente de "colunas rowid registradas". Estes são

  • Colunas INTEGER (32 bits) com
  • valores positivos diferentes de zero (1 - 2 ^ 31-1),
  • que são definidos como NOT NULL,
  • contêm valores únicos e
  • são reproduzíveis em consultas subsequentes

O ArcGIS usa essas colunas para manter o relacionamento entre as linhas nas tabelas e os gráficos no mapa. Sempre que você registrar uma tabela com um banco de dados geográfico corporativo, o ArcGIS criará uma coluna rowid configurada para SDE se uma não estiver disponível anteriormente.

Camadas de consulta são não devem ser registrados no geodatabase, mas devem ter uma coluna rowid com as mesmas características. Muitas pessoas tentam enganar as regras usando uma coluna computada de número de linha no lugar de um rowid, mas isso só criará o que a documentação se refere como "comportamento inconsistente" ao tentar mapear objetos espaciais para linhas de tabela (e vice-versa, como em uma operação de identidade).

Você precisará adicionar uma coluna rowid a esta tabela para usá-la em uma camada de consulta.


Primeiro, vamos esclarecer algumas coisas. Quando você diz que deseja adicionar uma mesa deMS SQL Server Management Studio 2012, o que você realmente deseja fazer é adicionar uma tabela deMS SQL Server. O estúdio de gerenciamento é simplesmente a interface do usuário para interagir com o próprio banco de dados.

Em segundo lugar, estou supondo que este banco de dados do SQL Server não tem ArcSDE carregado nele. Em caso afirmativo, carregar uma tabela deve ser tão simples quanto adicionar uma tabela padrão e não seria uma camada de consulta.

O ArcGIS é muito exigente quando se trata de lidar com bancos de dados fora do ambiente SDE. Você tem que ter certeza de que os drivers atualizados para o MS SQL Server. Você provavelmente fará o que for possível para adicionar a tabela. Se você for capaz de obter os dados como uma tabela dentro do ArcGIS, então você deve ser capaz de usá-los como parte de uma junção ou relacionamento, independentemente do banco de dados em que estão armazenados.

Como você já imaginou, um ID Único ou a falta dele é o desligamento. Como você sabe, com qualquer tabela independente que é criada através do ambiente ArcGIS, umID do objetoé criado. Este é um ID único que permite ao ArcGIS identificar qualquer linha individual. Quando você está trazendo uma camada de um banco de dados fora do ambiente ArcGIS, você precisa especificar o campo que será usado no lugar doID do objeto. Deixar de especificar um campo como este significa que você poderá adicionar uma tabela, mas não poderá realizar nenhuma opção que requeira a indexação das linhas. Isso inclui qualquer tipo de Joins ou Relates e outras operações espaciais.

Na imagem abaixo, estou carregando em uma tabela. O primeiro atributo listado égid. Como você pode ver, isso mostra que éNão anulável. Esse é um segundo critério importante, mas não exigido no início. Um erro será gerado se valores NULL forem encontrados, mas não se o campo permitir valores NULL. Este é o campo que irei escolher como oIdentificador únicoatributo.

Mesmo que essa camada seja uma camada espacial, as etapas são as mesmas para uma tabela não espacial também.

Agora, de volta ao seu problema e a algumas opções de soluções. Sua tabela não possui um campo de ID exclusivo. Voce precisa de um. Você tem algumas opções.

  1. Adicione o equivalente do SQL Server a um campo Autonumeração à sua tabela. Este método criará um ID exclusivo que não mudará em relação a uma linha específica. Depois que um ID é atribuído, ele persistirá e nunca se repetirá ou duplicará.
  2. Crie uma visualização no SQL Server, com base em sua tabela existente, e adicione um campo Autonumeração lá. Este método irá criar um ID único semelhante a um ArcGIS ID do objeto. Deveria NÃO ser usado como base para uma junção ou relacionamento, já que a atribuição de IDs a linhas é exclusivamente baseada nas mudanças na ordem de classificação. É suficiente, no entanto, para cumprir o requisito de ID de tabela exclusivo para uma camada de consulta. Aqui está um exemplo de código para essa instância:

    CREATE VIEW VIEW_NM AS SELECT Row_number () OVER (ORDER BY "EventName" DESC, "BoreholeID") AS tbl_id, "EventName", "Method", "BoreholeID" FROM yourtable

    ------ Editar ----- Foi levantada a preocupação de que usar uma função Row_number () não produziria um ID exclusivo adequado, porque ela pode retornar recursos diferentes. No caso que eu forneci, isso é verdade, na medida em que oOrdenar porcampo não é único. Portanto, você deve ter certeza de incluir uma combinação de campos nessa função que retornará uma ordem de classificação exclusiva ou valores quando convertidos em um número. Isso garantirá que um determinado recurso retornará o mesmo Object ID, independentemente de qual consulta é colocada nele no ArcGIS. Estou adicionando "BoreholdID" aoOrdenar porseção.

    Um problema que pode surgir ao trabalhar com uma vista, é o tipo de campo que o ArcGIS aplicará a este campo "tbl_id". Ele pode vê-lo como um tipo de campo com o qual não é capaz de lidar, portanto, pode ser necessário convertê-lo para umInteirotipo de campo. Foi assim que fiz algo semelhante com uma visualização em PostgreSQL:

    SELECT (int4 (Row_number () OVER (ORDER BY "EventName" DESC)) AS tbl_id

    A sintaxe do SQL Server pode ser um pouco diferente. Pode serintao invés deint4.

  3. Outra maneira de criar esse ID exclusivo seria usar a ferramenta Criar Tabela de Consulta. Esta ferramenta permite que você selecione uma tabela, visualize ou crie uma consulta SQL personalizada usando tabelas de banco de dados e exiba-as no ArcGIS como uma Camada ou uma Tabela Independente. Um dos parâmetros da ferramenta é como criar oChavecampo. Novamente, é feito selecionando um ou mais campos encontrados na camada de consulta, que serão usados ​​para criar dinamicamente o ObjectID. Isso é muito parecido com a função Row_number (), já que ambas estão criando um identificador exclusivo com base nos dados do resultado da consulta. Um está simplesmente fazendo isso no lado do banco de dados, o outro está lidando com o ArcGIS. Uma vantagem potencial desse método é a facilidade de incorporá-lo como parte de um script Python. Um exemplo é mostrado na parte inferior do documento de ajuda.

Como regra geral, você deseja ter um atributo identificador exclusivo para cada tabela, seja espacial ou de atributo, que você criar. A maioria dos bancos de dados funciona com mais eficiência em tabelas onde esse atributo existe e é designado como uma chave primária ou semelhante. Ele permite a criação de índices e, em muitos casos, a funcionalidade de edição e seleção é restrita quando um ID exclusivo não está presente.

Enfim, experimente e veja se funciona. Como mencionei, o ArcGIS pode ser muito específico ao adicionar camadas de consulta. Alguns outros problemas que você pode ter são com tipos de campo que se traduzem de forma diferente de como eles são definidos no banco de dados, para como ArcGIS os interpreta.

Este documento de ajuda pode ajudá-lo a garantir que você converta tipos de dados em sua tabela para aqueles que serão reconhecidos pelo ArcGIS. Tipos de dados do SQL Server suportados no ArcGIS


Contagem de linhas do SQL Server para todas as tabelas em um banco de dados

Eu sou um testador de banco de dados e uma de minhas tarefas envolve obter contagens de linhas de todas as tabelas no banco de dados de origem e compará-las com as contagens de linhas da tabela correspondente no banco de dados de destino. Como obtenho as contagens de linhas de todas as tabelas em um banco de dados do SQL Server? Quais são as diferentes abordagens para obter essas informações? Confira esta dica para obter respostas a essas e outras perguntas.

Solução

É uma etapa comum em qualquer projeto de ETL validar as contagens de linhas entre os bancos de dados de origem e destino como parte da fase de teste. Obter a contagem de linhas de cada tabela, uma a uma, e comparar e consolidar os resultados pode ser uma tarefa tediosa. Portanto, qualquer script / solução que possa obter as informações de contagem de linhas de todas as tabelas em um banco de dados pode ser realmente útil e eficaz, reduzindo consideravelmente o esforço envolvido. Nesta dica, veremos quatro abordagens diferentes para obter as contagens de linhas de todas as tabelas em um banco de dados SQL Server.

Vamos dar uma olhada em cada uma das abordagens:

  • sys.partitions Catalog View
  • sys.dm_db_partition_stats Exibição de gerenciamento dinâmico (DMV)
  • sp_MSforeachtable System Stored Procedure
  • Função COALESCE ()

4 respostas 4

Parece uma configuração de tempo limite. Portanto, seu SSMS acha que está demorando muito e cancela a conexão para você. O servidor SQL volta a funcionar. Mas existe ajuda. Você não é a primeira pessoa a encontrar isso.

Para todos que não querem clicar no link. Aqui está a resposta vencedora do preço:

Depois de encontrar o mesmo erro, me deparei com a configuração correta.

No Management Studio, no menu Ferramentas, selecione Opções e clique em "Designers". Há uma opção chamada "Substituir valor de tempo limite da string de conexão para atualizações do designer de tabela:" Na caixa "Tempo limite da transação após:", você verá a mágica de 30 segundos

Abra o SQL Server management studio -> Menu Ferramentas -> Opções -> Guia Designers -> Table and Database Designer -> Aumente o tempo limite de 30 segundos para 65535 segundos .--> OK

// Agora você pode salvar as alterações da tabela. // Espero que ajude e confira meu blog @: //www.ogolla.blogspot.com

Esta resposta surgiu para mim no Google mesmo pensando que eu estava adicionando um índice, não alterando uma coluna.

Existe uma maneira melhor de fazer alterações de longa duração:

1) Faça as alterações desejadas no design da mesa. Não pressione "Salvar".

2) No SSMS, clique em Table Designer. Em seguida, gere o script de mudança.

3) Na janela você verá um script que quando executado fará as alterações que você enfileirou no designer.

4) Você pode salvar e executar esse script em SMSS ou o que você pode fazer quando tiver confiança é "copiar" o script daquela janela para a área de transferência. Diga "não" para salvar o arquivo. Em seguida, feche o Designer SEM SALVAR (tecnicamente perdendo as alterações do banco de dados) e abra uma nova janela de consulta. Cole o script de alteração e execute o script. Suas alterações serão aplicadas ao banco de dados, mesmo que leve anos.


Como despejar um banco de dados Microsoft SQL Server em um script SQL?

Existe alguma maneira de exportar um banco de dados Microsoft SQL Server para um script sql?

Estou procurando algo que se comporte de forma semelhante ao mysqldump, pegando um nome de banco de dados e produzindo um único script que irá recriar todas as tabelas, procedimentos armazenados, reinserir todos os dados etc.

Eu vi http://vyaskn.tripod.com/code.htm#inserts, mas eu idealmente quero algo para recriar tudo (não apenas os dados) que funcione em uma única etapa para produzir o script final.


9 Respostas 9

Pelo que entendi desse problema, é um problema de "HOP".

ou seja, você está tentando usar o servidor A para retransmitir seus detalhes de login (com SSPI) para o servidor B.

No SQL Server 2005, eles adicionaram uma série de problemas de segurança que tornam isso mais difícil do que deveria ser. As palavras "Autenticação Kerberos" se tornarão o destino da vida da maioria dos sys-admins / DBA. Ele é efetivamente usado para autenticação de passagem.

Aqui estão os princípios básicos do que você precisa. 1) Os servidores (A e B) precisam ser configurados no Active Directory (AD) com a delegação para Kerberos habilitada. (isso é definido por meio do painel de administração do diretório ativo)

2) A conta de serviço em que seus servidores SQL são executados também precisa ter a delegação habilitada (isso também é definido por meio do painel de administração do diretório ativo). - se eles não estiverem sendo executados em uma conta de serviço, você precisará criar uma.

3) Os servidores precisam ter SPNs definidos para a instância e o HOST e o nome da máquina. (Usando uma ferramenta chamada SetSPN nas ferramentas de suporte do Windows)

4) Você pode precisar definir seu banco de dados como "confiável"

ALTER DATABASE SET confiável em

5) Depois de fazer tudo isso, reinicie suas instâncias.

6) Em seguida, tente criar seu servidor vinculado novamente.

Finalmente, você pode testar sua conexão com o SQL Server. Isso deve funcionar bem se você tiver tudo configurado corretamente.

Isso informará o tipo de autenticação da sua conexão.

Você deseja obter 'KERBEROS' aqui e não 'NTLM'.

É uma ladeira escorregadia, KERBEROS e Delegação de passagem, continue com ela e você acabará descobrindo.


Configurar

Para começar, certifique-se de ter uma cópia do OGR2OGR versão 1.8 ou superior (versões anteriores não têm o driver MSSQL instalado). Você pode construí-lo a partir do código-fonte fornecido na página GDAL ou, por conveniência, baixar e instalar os binários pré-compilados do Windows fornecidos como parte do pacote OSgeo4W.

Agora, vamos configurar alguns dados de teste em uma tabela do SQL Server que queremos exportar. Para testar a gama completa de recursos OGR2OGR (ou deveria dizer, "a gama completa de mensagens de erro que você pode criar"?), Vou criar uma tabela que contém duas colunas de geometria diferentes - uma geometria original e uma geometria de buffer , preenchido usando uma variedade de diferentes tipos de geometria:

Esta é a aparência do conteúdo desta tabela na guia Resultados Espaciais do SSMS:


MS SQL Server fica mais lento com o tempo?

Algum de vocês experimentou o seguinte e encontrou uma solução:

Uma grande parte do back-end do nosso site é MS SQL Server 2005. A cada semana ou duas semanas, o site começa a funcionar mais devagar - e vejo que as consultas demoram cada vez mais para serem concluídas em SQL. Tenho uma consulta que gosto de usar:

O que é bastante útil. ele fornece um instantâneo de tudo o que está sendo executado naquele momento em seu servidor SQL. O que é bom é que mesmo que sua CPU esteja 100% atrelada por algum motivo e o Activity Monitor esteja se recusando a carregar (tenho certeza que alguns de vocês já estiveram lá), esta consulta ainda retorna e você pode ver qual consulta está matando seu banco de dados.

Quando eu executo isso, ou o Activity Monitor durante os momentos em que o SQL começou a ficar lento, não vejo nenhuma consulta específica causando o problema - TODAS elas estão sendo executadas mais lentamente. Se eu reiniciar o serviço MS SQL, está tudo bem, ele acelera - por uma ou duas semanas até que aconteça novamente.

Nada que eu possa pensar mudou, mas isso começou há alguns meses. Ideias?

Observe que, quando essa desaceleração do banco de dados ocorre, não importa se estamos obtendo 100 mil visualizações de página por hora (horário do dia mais movimentado) ou 10 mil visualizações de página por hora (tempo lento), todas as consultas levam mais tempo para serem concluídas do que o normal. O servidor não está realmente sob estresse - a CPU não está alta, o uso do disco não parece estar fora de controle. parece fragmentação de índice ou algo do tipo, mas não parece ser o caso.

Quanto à colagem dos resultados da consulta que colei acima, realmente não posso fazer isso. A Consulta acima lista o login do usuário que está realizando a tarefa, toda a consulta, etc. etc. e eu realmente não gostaria de divulgar os nomes dos meus bancos de dados, tabelas, colunas e os logins online :). Posso dizer que as consultas em execução naquele momento são normais, consultas padrão para o nosso site que funcionam o tempo todo, nada fora do normal.

Já se passaram cerca de duas semanas desde a última reinicialização. Fiz várias alterações: encontrei algumas consultas em que estávamos fazendo uso pesado de tabelas temporárias que eram totalmente desnecessárias e nossos desenvolvedores mudaram a forma como estavam fazendo isso. Eu ajustei o tamanho de alguns dos bancos de dados em constante (lenta mas segura) crescimento para um tamanho inteligente para seu crescimento. Eu ajustei as configurações de crescimento automático para tudo também para ficar mais inteligente (TODAS foram definidas para crescimento de 1 MB). Por último, limpei um pouco o MSDB. Fazemos o envio de logs e realmente não precisamos manter anos e anos de pontos de backup. Eu escrevi alguns scripts que mantêm isso por apenas alguns meses. Vou continuar atualizando este tópico, pois é muito cedo para dizer se o problema já foi resolvido.


  1. No Object Explorer, clique com o botão direito em um servidor e selecione Propriedades.
  2. Clique no Memória nó.
  3. Debaixo Opções de memória do servidor, insira o valor que deseja para Memória mínima do servidor e Memória máxima do servidor.

Você também pode fazer isso em T-SQL usando os seguintes comandos (exemplo):

Para restringir o consumo de memória do serviço MS SQL:

Defina "memória máxima do servidor" no SQL Server Management Studio

Agora definiremos a opção "memória máxima do servidor" para limitar o uso de memória pelo SQL Server. Podemos fazer isso clicando com o botão direito em nossa instância e escolhendo "Propriedades".

No Object Explorer, clique com o botão direito em um servidor e selecione Propriedades.

Clique no nó de memória conforme mostrado abaixo:

4. Em Opções de memória do servidor, insira a quantidade desejada em Memória máxima do servidor. Abaixo, como você pode ver, estamos configurando a memória máxima do servidor para 4096 MB (ou seja, 4 GB).

Para restringir o consumo de memória do serviço MS SQL:

Podemos definir "memória máxima do servidor" também usando um script T-SQL:


Estágios de relatórios paginados do Reporting Services

Uma definição de relatório pode ser criada, publicada ou salva, compilada, processada, armazenada em cache, renderizada, visualizada, exportada e salva como histórico. Quando você executa um relatório, o servidor de relatório processa um relatório em três etapas: processamento de relatório, processamento de dados e renderização. O processamento de dados e relatórios é executado em uma definição de relatório, os resultados estão em um formato intermediário interno. Os relatórios que estão em formato intermediário são subsequentemente processados ​​em um formato de exibição específico. O diagrama a seguir mostra os estágios e elementos do processamento do relatório.


Diagrama de processamento de relatório

Definição de relatório

O arquivo de definição de relatório (.rdl) armazenado em um servidor de relatório. Para obter mais informações, consulte Report Definition Language (SSRS).

Relatório compilado e formato de relatório intermediário

O relatório que usa expressões avaliadas, parâmetros e propriedades dos parâmetros avaliados.

Instantâneo ou histórico de relatório

Um instantâneo é o conjunto de dados do relatório em um momento específico mais o formato intermediário que contém as informações do layout do relatório. Para obter mais informações, consulte Desempenho, instantâneos, cache (Reporting Services).

Relatório processado

Um relatório totalmente processado que contém dados e informações de layout.

Relatório renderizado

Um relatório totalmente processado é enviado a um renderizador de relatório para combinar os dados e o layout em cada página do formato de renderização de destino. As extensões de renderização são personalizáveis ​​e extensíveis. O formato de renderização padrão para um relatório é HTML 4.0. Para obter mais informações, consulte Layout e renderização de página (Construtor de Relatórios e SSRS) e Extensões (SSRS).

Relatório exportado

Um relatório exportado é um relatório totalmente paginado salvo em um formato de arquivo específico. Os formatos de exportação dependem das extensões de renderização instaladas e podem ser personalizados. Por padrão, os formatos de exportação incluem Excel, Word, XML, PDF, TIFF e CSV. Para obter mais informações, consulte Exportar relatórios (Construtor de relatórios e SSRS).


Assista o vídeo: How to Select Features by Attributes in ArcMap Tutorial