Perfil de LucasLucas Souza [MCP | MCTS ...FotosBlogListasMás ![]() | Ayuda |
Lucas Souza [MCP | MCTS SQL Server 2008] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
23 noviembre Restrições em Views Particionada no SQL Server 2008Olá Pessoal, Esses dias estive bastante ocupado e infelizmente não obtive muito tempo, todavia estarei passando algumas restrições importantes que temos que ter em mente com em relação as Views particionada no SQL Server 2008: Todos os membros que pertence a tabela precisa obter a mesma definição da opção ANSI_PADDING; []´s 20 noviembre Configurando/Instalando o SQL Server 2008 (Parte 02)No artigo anterior foi descrito quais são os Sistemas Operacionais suportados pelo SQL Server 2008, quais são as edições dísponiveis e suas features, e por último as configurações mínima ambos de CPU/Memória para cada Edição e Sistema Operacional. Tenha em mente quais são as limitações que o SQL Server 2008 adota, neste momento iremos efetuar a instalação do SQL Server 2008. 1º) execute o aplicativo setup.exe o qual está situado na pasta de instalação do aplicativo. 2º) Após isto, clique em Installation situado no lado esquerdo, em seguida New SQL Server stand-alone installation or add features to an existing installation, a imagem abaixo ilustra de forma clara. 3º) A próxima janela tem por objetivo mostrar as regras que o SQL Server 2008 possui, e além disso se foi bem sucedida ou não, para mais informações sobre estas regras clique em Show Details >>, ou então em View Detailed Report para visualização em modo web, após isto clique em OK. 4º) Na janela abaixo, selecione a sua edição preferencial,e/ou digite a chave do produto conforme você adqueriu na compra do Aplicativo,clique em Next, clique na caixa ao lado do nome I accept the license terms (se desejar copiar ou imprimir os termos exibido, clique na figura conforme desejado) em seguida Next, esta última janela de suporte a instalação de arquivos tem por objetivo mostrar os componentes requerido para instalação do SQL Server, clique em Install .
5º) Para visualizarmos o status e a regras dísponiveis clique em Show Details, após isto clique em Next >, Clique em Select All (Selecionar todas as features), ou então selecione apenas as features que será necessário ao uso da aplicação, selecione o diretório conforme será instalado, em seguida clique em Next >. ![]() Figura 1.4 (Installation – Setup Support Rules) 6º) Selecione Default Instance, ou Named Instance, se necessário altere Instance ID, e Instance root directory, após isto clique em Next >, na próxima janela será exibido quanto de espaço o aplicativo irá consumir, e quanto dísponivel a unidade possui, clique em Next >. 7º) Selecione a conta para cada serviço, defina o password , escolha qual o modo que aplicação irá se comportar, ou use a mesma conta para todos os serviços (não recomendado), na aba Collation, selecione a opção conforme satisfaz a sua aplicação, apóst isto clique em Next >. 8º) Selecione a opção Windows authentication mode, ou Mixed Mode (SQL Server authentication or Windows authentication juntamente definido com o password desejado, clique em Add Current User, na aba Data Directories, veja/escolha a pasta da qual as informações serão armazenadas, na aba FILESTREAM, se necessário for que sua aplicação utilize este novo recurso marque a opção ao lado de Enable FILESTREAM for Transact-SQL access e/ou selecione a opção abaixo, para mais informações relacionado a este recurso veja: http://msdn.microsoft.com/en-us/library/cc949109.aspx (Configuring SQL Server for FILESTREAM), clique em Next >. 9º) Ao estarmos na janela (Analysis Services Configuration) , clique em Add Currrent User, na aba Data Directories, veja aonde as informações relacionadas ao serviço serão armazenadas, clique em Next >. 10º) Escolha uma das 3 opções conforme foi exibido, a primeira opção tem por objetivo instalar o serviço de relatórios (Reporting Services) no modo nativo, segunda opção irá instalar o SharePoint no modo integrado por padrão, e a terceira e ultima opção informa que será instalado, porém não irá ser configurado, clique em Next >. 11º) A janela atual possui 2 opções, ambos tem por objetivo enviar erros ao centro de servidor da Microsoft, é recomendado que habilite as duas opções citadas. 12º) Veja que, através da opção Show Details >> podemos visualizar o sumário de todas as opções/configurações que selecionamos/escolhemos dos passos anteriores, a figura abaixo ilustra de forma mais clara, clique em Next >.
13º) Nesta última janela será mostrado todas as informações conforme a aplicação irá obter, e por último clique em Next >. 14º) Por último é mostrado o nome das features e o seu status, esta janela por objetivo exibir quais foram as features que obtiveram sucesso ou não.
15º) Ao chegarmos ao término da instalação,se for necessário a visualização do log de instalação (clique no link), após isto, clique em Close. Conclusão []´s 12 noviembre Desconto em CertificaçõesA Paz Esteja Convosco,
A Prometric está fornecendo para os estudantes um desconto de 50% nas certificações Microsoft.
A promoção é válida até 30 de junho de 2010.
Para maiores detalhes acesse o site abaixo:
http://www.prometric.com/microsoft/student, aproveitem... logo, logo estarei agendando os meus exames! (:
[]´s Lucas Souza MCP | MCTS SQL Server 2008 Ciência da Computação - FFB 10 noviembre CertificaçãoA Paz Esteja Convosco,
Gostaria de comunicar a todos que hoje obtive meu primeiro título de MCTS em SQL Server 2008 (obtive 828 Pontos), a prova foi composta por 48 questões. Em breve estarei criando algumas perguntas e respostas com em relação a este exame, tenho por objetivo ajudar aqueles que estão postos a fazer, obrigado.
[]´s
Lucas Souza
MCP | MCTS SQL Server 2008
Ciência da Computação - FFB 09 octubre Student to Business (2ª FASE)Olá Pessoal,
Estou comunicando á todos os aprovados para a 2ª FASE do programa Studento to Business (Microsoft)
Local: Fanor Dunas - Av. Santos Dumont, 7800 - Dunas - Fortaleza - Ceará - Fone/Fax: (85) 3052.4848
Os dois endereços acima são do Dunas, no site na FANOR tem o primeiro e no site do S2b o segundo. Mas é o mesmo local. Infra-Estrutura
Desenvolvimento
O Cronograma: Abaixo segue os dias e horári referentes a sua trilha:
Quem não recebeu e-mail, ou não teve pontuação mínima ou escolheu a trilha de Design WEB, que não temos no Ceará. []´s Lucas Souza 06 octubre Configurando/Instalando o SQL Server 2008 (Parte 01)A Paz do Senhor Esteja Convosco, Nesta Série de artigos tenho por objetivo descrever como devemos configurar/instalar o SQL Server 2008 em um ambiente comporativo, sendo assim estarei mostrando á vocês passo-a-passo como devemos configurar/instalar utilizando o S.O (Sistema Operacional) Windows Server 2008 Enterprise, é possível efetuar a instalação em outro S.O, porém é necessário termos em mente quais são as limitações que o SQL Server 2008 adota. Antes de iniciarmos a instalação do aplicativo, quero mostrar a todos vocês quais são as configurações mínimas requerida de hardware para termos a instalação do SQL Server 2008 bem sucedida, a tabela abaixo ilustra de forma clara e simples.
Tabela 1.0 (Hardware Requerimento) Para mais informações relacionado aos requerimentos mínimo de Hardware e Software, veja: “Hardware and Software Requirements for Installing SQL Server 2008”. Requerimento de Softwares OBS: .NET Framework 2.0 já inclui Windows Installer 3.1. Além dos requerimentos conforme descrito acima, o SQL Server 2008 também requer alguns outros componentes, por exemplo: o Internet Explorer 6 SP1 ou superior; o Shared Memory (Memória Compartilhada), Named Pipes ou suporte a rede TCP/IP; o Microsoft Data Access Components (MDAC) 2.8 SP1 ou superior. Suporte a Sistemas Operacionais O SQL Server Express suporta os seguintes sistemas operacionais (S.O): o Windows XP Tablet Edition SP2 ou superior; o Windows XP Media Center 2002 SP2 ou superior; o Windows XP Home Edition SP2 ou superior; o Windows XP Home Reduced Media Edition; o Windows XP Professional Reduced Media Edition; o Windows XP Professional Embedded Edition Feature Pack 2007 SP2; o Windows XP Professional Embedded Edition for Point of Service SP2; o Windows Server 2003 Small Business Server Standard Edition R2 ou superior. Os sistemas operacionais (S.O) abaixo suportam todas as edições do SQL Server: o Windows Server 2003 Standard SP2 ou superior; o Windows Server 2008 Standard ou superior; Os sistemas operacionais (S.O) que dão suporte as edições SQL Server Express, Developer e Evaluation são: o Windows XP Professional SP2 ou superior; o Windows Vista Home Basic ou superior. OBS: SQL Server 2008 não dá suporte ao sistema operacional (S.O) Windows Server 2008 Server Core, isto devido ao .NET Framework que não é suportado no Server Core. Edições dísponiveis no SQL Server 2008 § Enterprise: Útilizavel em ambientes corporativo pelo qual possuí grande volume de dados, além disso é possivel utilizar todas as features (características) dísponiveis do aplicativo.
§ Standard: Projetado para organizações pequenas e médias as quais não necessitam amplamente de todas features (caractéristicas). § Workgroup: Edição pelo qual pode ser útil em cenários de pequeno volume de dados em estações que possuem poucos servidores.
§ Express: Esta edição é totalmente gratuíta, ou seja, útil em cenários aonde envolva pequeno volume de informações.
§ Web Edition: Edição que suporta alto nível de aplicação para banco de dados na web, sendo asssim, oferecendo o menor custo.
§ Developer: Possui todas as features (características) da Enterprise, porém pode ser utilizado apenas em ambientes de teste, ou seja, não é permitido o uso desta edição para produção.
§ Compact Edition: Esta edição é propriamente utilizada em aplicativos pelos quais se conectam diretamente a dispositivel móvel (celulares),. Desde já, podemos escolher qual dentre as edições citadas acima satisfaz a nossa aplicação comercial, no entanto, é interessante também sabermos qual o tamanho de cada componente que engloba o SQL Server, a tabela abaixo tem por objetivo mostrar quanto de espaço físico cada componente irá ocupar no disco rígido existente.
Tabela 1.1 (Componentes do SQL Server)
OBS: lembre-se que, o SQL Server 2008 não pode ser instalado no S.O Windows Server Core. Caros usuários, se por acaso sua aplicação estiver situada no SQL Server 2005 e deseja atualizar para o 2008, utilize a tabela abaixo que tem por objetivo a verificação das edições que o SQL Server suporta.
Tabela 1.2(Atualizações no SQL Server)
[]´s Lucas Souza
20 septiembre Alta disponibilidade no SQL ServerA definição básica de Hight Availability (Alta-Disponibilidade) pode ser descrito de forma simples, ou seja, é a solução que permite o hardware ou software em caso de falha continue sendo executado ou melhor, funcionando. A solução de alta-disponibilidade é funcionável através da redundância de drivers, memória ou CPU no servidor. Particulamente quando definimos a redundância dos díscos rígidos em nossa aplicação geralmente aplicamos a tecnologia RAID (Redundant Array of Inexpensive Disks), ou seja, esta tecnologia tem por objetivo nos oferecer diversas opções relacionado á perfomance, segurança, alta-disponibilidade no sistema operacional (S.O), todos níveis de RAID requerêm pelo o menos dois discos rígidos dísponiveis, sendo que alguns é necessário termos três ou quatro. RAID 0: Aonde em todos os discos são escritos numa só vez. A parte superior deste nível RAID é bastante rápida e econômica, porém em caso de falha de hardware os díscos irão perder as informações processadas. RAID 1: Aqui é necessário ter pelo menos dois discos rígidos, os dados são escritos primeiramente ao disco um e também será escrito ao disco dois numa só vez, este level tem por objetivo nos garantir ótimo benefício com relação á alta-disponibilidade, ou seja, em caso de falha as informações não serão perdidas, com relação á perfomance não é uma boa escolha. RAID 5: É o mais comum usado, nos garante ambos as funcionalidades de RAID 0 e 1, porém tem o menor custo por gigabyte, o RAID 5 requer pelo o menos três díscos rígidos, este lével (RAID 5) é escrito em todos discos com exceção á um. RAID 6: É um novo level RAID dísponivel dentro no mundo de banco de dados, este level requer pelo o menos quatro dísco rígido, similar ao RAID 5 com exceção de que usa dois drivers separados. RAID 10: É o mais caro entre todos dísponiveis, possuí alta redundância e execução, requer pelo o menos quatro dísco rígido; Veja bem, acima mostra-se cinco tipos distintos de RAID, Uma das perguntas que sempre vem a mente é: Qual deles é o melhor¿ Esta resposta pode ser facilmente respondida: Qual objetivo de sua aplicação¿, perfomance¿, alta-disponibilidade¿ segurança¿, Se necessário for buscar sua resposta pergunta á si mesmo e adquira o que submeter a sua aplicação. Opções de Alta-Disponibilidade Log Shipping (overview) Log Shipping é consistido por três operações: Para utilizar o log-shipping siga os passos abaixo: 01) Na janela Object-Explorer, clique com o botão direito encima do banco de dados desejado, em seguida Tasks, a imagem abaixo ilustra de forma clara.
Apartir de já podemos configurar/alterar algo referente na aplicação pelo qual utiliza o log shipping. Mirroring(overview) Benefícios: OBS: Além disso o Data Mirroring pode ser utilizado com os seguintes componentes do SQL Server: Para configurarmos o Data Mirroring clique com o botão direito no banco de dados desejado em seguida Tasks > Mirror como mostra a imagem abaixo. ![]() Figura 1.1 (Object Explorer – Tasks(Mirror)) Desde já podemos iniciar nosso espelhamento no banco de dados desejado. Clustering O cluster está aplicado geralmente em dois ou mais servidores unidos mostrando-se como um único servidor, os servidores que estão conectados ao cluster permitem o compartilhamento de cargas de trabalho, permite unicamente um ponto de gerenciamento/operação e além disso nos garante um dirétorio altamente beneficiado e protegido, sendo assim o objetivo do Cluster é fornece um ambiente de Alta-disponibilidade. Para iniciar a instalação do Cluster juntamente com o SQL Server clique no link New SQL Server Stand-Alone Installation ou então abaixo dele, no link New SQL Server Failover Cluster Installation, a figura abaixo ilustra de forma mais viável. ![]() Figura 1.2 (SQL Server Installation Center – High-Availability) Apartir de então podemos escolher qual das opções acima satisfaz o nosso ambiente e após isto aplicarmos. Links: Installing a SQL Server 2008 Failover Cluster: White papers SQL Server 2008 Failover Clustering: SQL Server 2008 High Availability: []´s 12 septiembre O que são Views no SQL Server¿Simplismente pode ser descrito como uma ou mais instrução SELECT contendo schema, colunas, atributos, etc. As views são comumente conhecidas como tabelas virtuais as quais tem por objetivo capturar colunas de tabelas existentes no banco de dados, desta forma podemos definir o nome específico da view e armazenar-la no banco de dados. A maior vantagem das Views é criar-las contendo uma ou mais instrução SELECT, a sintaxe da criação da view mostra-se abaixo: [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ]
<view_attribute> ::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] }
Apartir do momento que sabemos que as views armazenam instruções SELECT definida pelo usuário, além disso vale lembrar que as instruções SELECT pode ser referenciada por tabelas, views ou até mesmo funções.
BENEFÍCIOS o Nos garante um mecanismo de segurança que restringe aos usuários ter permissões nos dados em uma ou mais tabelas; o Garante os desenvolvedores visualizarem apenas os dados armazenados em tabelas lógica; o Mineração de dados através de cargas de trabalho; o Data warehouses; o Data marts; o Armazenar e originar processamento analítico online (OLAP) o Decisão para suportar cargas de trabalho
LIMITAÇÕES o Usar a cláusula OPTION; o Usar a palavra-chave INTO; o Referenciar tabelas temporárias, variáveis ou outros tipos; o Contêr a cláusula ORDER BY ao menos que específique o operador TOP; o Contêr a cláusula COMPUTE ou COMPUTE BY. OBS: As views podem contêr múltiplas instruções SELECT juntamente utilizadas com os operadores UNION ALL ou UNION; Exemplo¹: -- Esta view tem por objetivo a exibição de dois campos para cada tabela distinta, sendo elas: Product, Address, Customer CREATE VIEW dbo.ViewTeste AS SELECT ProductID, Name FROM AdventureWorks.Production.Product UNION ALL SELECT AddressID, City FROM AdventureWorks.Person.Address UNION ALL SELECT CustomerID, CustomerType FROM AdventureWorks.Sales.Customer
Exemplo²:
-- Esta view tem nos mostra a soma do Total de impostos da tabela SalesOrderHeader, sendo assim nos trazendo apenas os resultados em que a data esteja acima do ano 1992, mês 11, dia 25. CREATE VIEW dbo.TotalVendas AS SELECT TOP 100 SalesPersonID, SUM(TotalDue) AS TotalSales FROM Sales.SalesOrderHeader WHERE OrderDate > CONVERT(DATETIME,'19921125',101) GROUP BY SalesPersonID; GO
Se por acaso for necessário utilizar operações de indexes nas views é necessário seguirmos alguns passos, por exemplo:
o Verifique a configuração da opção ANSI_NULLS se está corretamente assinalada para todas a tabelas existentes a qual irá ser referenciada dentro da view; o Verifique a configuração ANSI_NULLS se está corretamente assinadada para a sessão atual que mostra-se dentro da tabela; o Verifique as propriedades ANSI_NULLS e QUOTED_IDENTIFIER se está corretamente assinaladas as sessões atuais mostradas na tabela; o Verifique se a definição da view é deterministica, para mais informações, veja: Deterministic and Nondeterministic ; o Crie a view usando a opção WITH SCHEMABINDING; o Verifique suas sessões com a opção SET e vejam como estar corretamente mostrada na tabela; o Crie finalmente o index clustered unique dentro na view.
[]´s
Lucas Souza
29 agosto Novidades no SQL Server 2008 com Integration Services, Analysis Services e Reporting ServicesA Paz do Senhor Esteja Convosco,
Integration Services (SSIS) Presente em versões anteriores ao 2008, tem por objetivo a capacidade de Extrair (Extract), Transformar (Transform) e Carregar (Load) dados ou melhor, comumente conhecido como ETL, nos permite construimos aplicações que seja capaz de gerenciar ambos banco de dados e fontes de informações sobre-carregadas. Suporte á scripts VSTA, podendo assim utilizar juntamente com aplicações C#.NET ou Visual Basic.NET. Novos tipo de dados ‘time e date’ o qual nos permitem aplicarmos em intervalos ou zonas de tempo definido pelo usuário. Nos permite aprimorar operações de consultas altamente fragmentadas através do novo transformador de dados. Permite nos livrarmos de arquivos sujos os quais foram gerados nos próprios pacotes pessoais. Componentes ADO.NET permitindo agora enviar/receber arquivos de provedores compátiveis juntamente com ADO.NET. Mecanismo Change Data Capture (CDC) armazenado diretamente dentro do SSIS, permitindo pacotes para extração e manipulação de dados.
Analysis Services (SSAS) Está presente também em edições anteriores ao 2008, SQL Server Analysis Services pode ser conhecido como uma ferramenta de processo analítico (OLAP) , permite a distribuição de consultas, scripts e também capaz de gerenciar cubos que foram criados pelo Business Intelligence Development Studio (BIDS). Permite dividir ambos os dados testados e também nos capacita á preparar-los. Permite visualisar a consulta dos dados em cache que estão em modelos minerados (mining), similiar ao que pode ser visto em versões anteriores. Permite cruzar múltiplos modelos de dados minerados que foram validados, além disso podemos também determinar quais deles poderiam ser o modelo exato. Sequências de algortimos produzidos pela Microsoft que podem agora ser configurados para utilizar juntamente com o padrão ARTxp ou ARIMA o qual é o novo. Extensões personalizadas que permitem adicionar métricas para o cubo e além disso á possibilidades de compartilhar informações com usuários que estão dentro do cubo.
Reporting Services (SSRS) SQL Server Reporting Services tem por objetivo á distribuição de relátorio de dados. Esta ferramenta nos garante possuirmos uma plataforma ambos robusta e organizada com a capacidade de construir relátorios complexos que podem ser vistos em portais web e assim serem também acessados através de regras de segurança definidas pelo usuário. Reporting Services no SQL Server 2008 Capacidade de integração com SharePoint através de interfaces programáveis. Pode-se criar relatórios dentro do Business Intelligence Development Studio (BIDS) ou através do único Report Designer. O mapeamento de relatórios tem melhorado para nos garantir ambos os tipos de gráficos específicos e controle de elementos. Uma nova região para estimar os dados agora é dísponivel com a funcionalidade similar ao Key Perfomance Indicators (KPIs) o qual é usado no SQL Server Analysis Services cubos. As variáveis podem ser declaras ambos global ou escopo para especificar os grupos necessários. As tabelas, matrizes e listas de regiões de dados foram substituidas por uma única região o qual tem a capacidade de assumir as três em uma só. Pode-se criar de forma automática relátorios para Excel, Word, Imagens, PDF, CSV, Web Forms, Windows Forms e formatos XML. Regiões de dados aninhados podem ser invertidos para Excel. Eliminação do IIS na área de configuração, o servidor de relátorio é retornado totalmente autênticado. Os administradores podem definir a quantidade de memória necessária para se consumir juntamente com os servidores de relatórios. O servidor de relatório não requer o IIS e está nativamente no ambiente padrão, a biblioteca HTTP.SYS permite acesso a relatórios(únicos) e servidores de relatórios. Itens dos relatórios ‘Dundas’ são completamente suportados. []´s Lucas Souza 19 agosto SQL Server 2008 R2 Gostaria de indicar á todos que a Microsoft lançou o SQL Server 2008 R2, no entanto vale lembrar que é uma versão preview e está dísponivel apenas para assinantes TechNet e MSDN, lembrando que também o público tem a permisão de efetuar o download e por enquanto só possuí a versão Inglês(English). Efetue o download do SQL Server 2008 Aqui:
[]´s Lucas Souza 12 agosto SQL Server - Dicas ao utilizar datetimeA Paz do Senhor Esteja Convosco,
Estarei trazendo para todos vocês hoje uma dica em relação á hora/minuto no SQL Server, no entanto vale para qualquer versão/edição, todavia estarei utilizando a edição 2008.
Bem, vamos agora ao que interessa.
Primeiramente se por acaso quisermos saber os resultados referente á hora, minuto e segundo no SQL Server 2000 e 2005 podemos executar á instrução abaixo:
SELECT GO
Podemos também saber em que dia estamos: SELECT GO Quando passamos á utilizar o SQL Server 2008 nos torna mais fácil até porque temos novos tipos de dados, por exemplo: date, time, entre outros...
SELECT CONVERT(DATE,GETDATE(),101) AS ApenasData GO datetime OBS: Estes tipos de dados citados acima (TIME,DATE) estão dísponiveis apenas na edição 2008.
[]´s
Lucas Souza 08 agosto Utilizando dados espaciais no SQL Server 2008 (Parte 02)A Paz do Senhor Esteja Convosco, No artigo anterior falamos qual a importância dos dados espaciais em nossas aplicações, porque e quando devemos utilizar, o que é o plano geométrico e suas dimensões, qual diferença dos tipos de dados geometry e geography os quais são novos tipos de dados que estão presente no SQL Server 2008 e por último vimos quais são os tipos específicos para cada tipo de dados existente. Ao termos conhecido as diferenças dentre os tipos de dados geometry e geography o que nos resta neste momento é conhecermos quais são os diferentes formatos que podem ser utilizados para representar os dados espaciais, existe exatamente três: 1. The Well-Known-Binary (WKB) format 2. The Well-Known-Text (WKT) format 3. The Geography Markup Language (GML) data format. Todos os formatos mostrado acima foram publicados pela Open Geospatial Consortium (OGC) o qual é lider dos padrões geoespaciais e serviços baseados em locazalições. 1. The Well-Known-Binary (WKB) format : Este é o formato binário pelo qual representa a instância do tipo de dados geography, é um dos formatos preferidos serializados das aplicações que necessitam armazenar informações geoespacial em compactação.
2. The Well-Known-Text (WKT) format: Este formato é compacto, ou melhor nos garante uma leitura fácil, isto porque é um formato amigável e o mais comum para se usar em consultas geoespaciais.
3. The Geography Markup Language (GML) data format: Este formato representa o padrão (XML), o qual é a melhor alternativa para incluir informações geoespaciais em documentos XML. Este formato é útil em aplicações onde é necessário alterar informações geoespaciais por meios de XML Web Service. Os padrões conforme foi ilustrado acima nos oferece vastas vantagens, o que precisa ser analisado é: Qual deles se comportaria de melhor forma em nossas aplicações. Os dados espaciais também suportam algumas funções, atualmente existem mais de 60 nos tipo de dados geometry e geography. STDifference -- Results: POLYGON ((10 10, 40 10, 40 26.666666666666668, 20 20, 26.666666666666668 40, 10 40, 10 10)) DECLARE @g geometry = 'POLYGON((10 10, 40 10, 40 40, 10 40, 10 10))' DECLARE @h geometry = 'POLYGON((20 20, 50 30, 50 50, 30 50, 20 20))'
SELECT @G.STDifference(@H).ToString();
STIntersects -- Results: POLYGON ((30 30, 40 30, 40 40, 30 40, 30 30)) DECLARE @g geometry = 'POLYGON((10 10, 40 10, 40 40, 10 40, 10 10))' DECLARE @h geometry = 'POLYGON((30 30, 50 30, 50 50, 30 50, 30 30))'
SELECT @g.STIntersection(@h).ToString();
STSymDifference -- Results: MULTIPOLYGON (((50 30, 50 50, 30 50, 40 40, 50 30)), ((10 10, 40 10, 40 40, 10 40, 10 10))) DECLARE @h geometry = 'POLYGON((40 40, 50 30, 50 50, 30 50, 40 40))'
SELECT @g.STSymDifference(@h).ToString();
STUnion -- Results: MULTIPOLYGON (((50 30, 50 50, 30 50, 40 40, 50 30)), ((40 10, 40 40, 10 40, 20 20, 40 10))) DECLARE @g geometry = 'POLYGON((20 20, 40 10, 40 40, 10 40, 20 20))' DECLARE @h geometry = 'POLYGON((40 40, 50 30, 50 50, 30 50, 40 40))'
SELECT @g.STUnion(@h).ToString();
-- Results: MULTILINESTRING ((40 40, 30 30), (25 25, 8 8)) DECLARE @g geometry = 'LINESTRING(8 8, 40 40)' DECLARE @h geometry = 'POLYGON((25 25, 15 30, 30 30, 30 15, 25 25))'
SELECT @g.STDifference(@h).ToString(); ![]() Figura 1.4 (Function – Blended Types)
-- Results: 400 | 121.28990204492 SELECT @g.STArea(), @g.STLength()
STCentroid -- Results: POINT (20 30) DECLARE @g GEOMETRY = 'POLYGON((10 10, 10 40, 40 40, 10 10))' SELECT @g.STCentroid().ToString() Utilizando dados espaciais no SQL Server 2008 (Parte 03)
Continuação...
STWithin, STContains
Dois métodos que seguem também o padrão OGC retornando 1 ou 0 e indica se todos ‘Points’ da instância existe totalmente ao lado de outra instância STContains() testa se o parâmetro instância está do lado da instância base STWithin() testa se a instância base está do lado da instância parâmetro, retorna verdadeiro se dado o valor geometric estiver juntamente á outro, de outra forma, retorna falso. Este método irá retorna NULL se todos SRID da instância não possuír o valor adequado ao SRID da outra instância; -- Results: 1 0 -- 0 1 DECLARE @g geometry = 'POLYGON ((10 10, 13 30, 30 30, 30 15,10 10))' DECLARE @h geometry = 'LINESTRING (16 16, 16 24, 25 18)'
SELECT @g.STContains(@h), @g.STWithin(@h) SELECT @h.STContains(@g), @h.STWithin(@g)
STPointOnSurface SELECT @g.STPointOnSurface().ToString()
STGeometryType -- Results: Polygon DECLARE @g geometry; SET @g = geometry::STGeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 0); SELECT @g.STGeometryType(); STGeomFromText -- Results: LINESTRING (100 100, 20 180, 180 180) DECLARE @g geometry; SET @g = geometry::ST GeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0); SELECT @g.ToString(); STTouches STDistance
Aos termos analisado algumas funções e formatos existentes nos dados espaciais, o que nos resta agora é apenas aplicar-los, os tipos específicos podem ser usados ambos em definições de tabela e tipos variáveis. Dependendo de sua manipulação dos dados espaciais sendo plano ou ellipso pode-se usar ambos os tipo de dados geometry e geography, iremos neste momento ao exemplo prático. USE master GO
IF EXISTS(SELECT Name FROM sys.databases WHERE name = N'SpatialDatabase') DROP DATABASE SpatialDatabase
CREATE DATABASE SpatialDatabase ON PRIMARY (NAME = SpatialDatabase_data, FILENAME = 'C:\DatabaseSpatial\SpatialDatabase.mdf'), FILEGROUP SpatialGroup1 (NAME = SpatialGroup2, FILENAME = 'C:\DatabaseSpatial\SpatialDatabase.ndf') LOG ON (NAME = Spatial_log, FILENAME = 'C:\DatabaseSpatial\SpatialDatabase.ldf') GO
USE SpatialDatabase;
CREATE TABLE #GeometrySpatial ( LocationID INT PRIMARY KEY CLUSTERED NOT NULL, LocationName NVARCHAR(30), Position GEOGRAPHY );
INSERT INTO #GeometrySpatial (LocationID,LocationName,Position) VALUES (1,'Nova York', geography::Parse('POLYGON(( -75.17031 39.95601, -75.16786 39.95778, -75.17921 39.96874, -75.18441 39.96512, -75.17031 39.95601 ))'))
INSERT INTO #GeometrySpatial (LocationID,LocationName,Position) VALUES (2,'Chicago', geography::Parse('POLYGON(( -75.17031 39.95601, -75.16786 39.95778, -75.18870 39.97789, -75.18521 39.99237, -75.18603 40.00677, -75.19922 40.01136, -75.21746 40.03142, -75.22534 40.02586, -75.21052 40.01430, -75.19192 40.00634, -75.19248 39.99570, -75.20526 39.98374, -75.19437 39.97704, -75.19087 39.96920, -75.17031 39.95601))'))
INSERT INTO #GeometrySpatial (LocationID,LocationName,Position) VALUES (3,'Miami', geography::Parse('POLYGON(( -75.22280 40.02387, -75.21442 40.02810, -75.21746 40.03142, -75.22534 40.02586, -75.22280 40.02387))'))
-- Trazendo os valores de forma compreensivel. SELECT LocationID,LocationName,Position.ToString() as WKT, Position.STLength() as longitude FROM #GeometrySpatial
Figura 2.0 (Results – measures and longitude) -- Visualizando o Spatial Results SELECT * FROM #GeometrySpatial
OBS: Se por acaso quisermos obter a lista de todos SRIDs suportados pelo SQL Server, podemos executar a instrução: Figura 1.2 (Results - SRIDs)
Ótimo, agora que conhecemos o que são os dados espacias, quando devemos utilizar, quais são as diferença dentre os tipos de dados geometry e geography, quais são os formatos e tipos existentes suportados pelo SQL Server e o exemplo prático, o que resta neste momento é apenas implementar-los em nossa aplicação e assim termos a convicção de que possuímos uma aplicação pelo qual possui ótimas vantagens quando o assunto se relata em buscas (mundialmente).
[]´s
Lucas Souza 31 julio Usando Dados Espaciais no SQL Server 2008 (Parte 01)A Paz do Senhor Esteja Convosco, Lembro-me de que há alguns dias atrás estive escrevendo alguns artigos relacionado á dados espaciais no SQL Server 2008, porém devido ao tempo apresentei apenas uma visão geral, nesta série de artigos espero ir bem além do que já vimos. Ótimo, além do SQL Server nos fornecer diversas opções relacionado á Integração de Dados, Relátorio de dados, Replicação de dados, Políticas, Manutenção de Planos, temos também agora suporte á dados espaciais no SQL Server 2008, os dados espaciais são implementados por ‘CLR Types’ interno no banco de dados, os dados espaciais tem por objetivo de armazenar dados representando posições e estruturas geométrica no SQL Server. Tendo isto em mente podemos agora desenvolver aplicações que pode nos conceder a distância, localização e espaço em um certo ponto localizado em uma certa circunstância, podendo assim também vir até de aplicações pelo qual utiliza GPS (Global Positioning System). Porque e quando devemos utilizar os Dados Espaciais? Certa vez ao possuirmos aplicações pelo qual disponibiliza produtos mundialmente um dos grandes aspectos que pode influenciar ao utilizar os dados espaciais são: 01) Aonde o produto será entregue? 02) Aonde o produto se encontra neste momento? 03) Por quais cidades já tem passado? Quando precisamos trabalhar com os dados espaciais temos que ter em mente alguns requisitos, por exemplo: 01) Os tipos de dados de espaciais podem ser usados para além de coordenadas, consistindo assim em mistura de pontos, linhas, um único-segmento ou multi-segmento. 02) Habilidade de executar grandes massa de operações de dados geoespacial, por exemplo: aplicações que necessitam calcular a área de um ponto complexo á outro. 03) Armazenar coordenadas espaciais diretamente dentro do banco de dados, ou melhor armazenar informações de uma localização á outra. Relembro de que alguns dias atrás (ainda este ano) estive estudando geometria e o Plano Geométrico pode descrito por duas dimensões criadas no espaço, dimensões estas que podem ser descritas usando as posições em uma ordem de números indicando a posição de cada uma, ou melhor ‘o verdadeiro X e Y’. A figura acima representa um plano pelo qual possuí dois pontos identificando as coordenadas X (esquerdo e direito) e a coordenada Y (alto e baixo), neste caso com esses valores conforme mostra a imagem podemos identificar dois pontos no espaço dimensional. Qual diferença entre Geometry e Geopraphy ? Temos atualmente esses dois tipos de dados suportados no SQL Server 2008, porém eles possuem algumas diferenças entre si, vale lembrar que apesar de ambos fazerem parte de dados espaciais cada um tem por objetivo uma determinada forma. · Geometry: É um tipo de dados .NET common languague runtime (CLR), tem por objetivo de armazenar dados baseados em pontos nas dimensões(X,Y) e opcionalmente nas coordenadas (Z) em um único modelo traçado, essas dimensões podem ser conhecidas através do ‘plano geométrico’, representando assim os dados em um sistema de coordenadas Euclidean(flat), por mais informações á respeito desse tipo de dados, visite: geometry Data Type Method Reference.
· Geopraphy: Pode ser visto também como outro tipo de dados .NET common language runtime (CLR), os dados geográfico tem por objetivo armazenar linhas, pontos, círculos, polígonos e uma coleção de cada um desses, usando assim um modelo oposto ao ‘round earth’ para o ‘flat earth’ utilizando as coordenadas X e Y, o tipo de dados geometry utiliza as combinações de latitude/longitude (GPS) representando um único ponto, por mais informações á respeito desse tipo de dados, visite: geometry Data Type Method Reference.
OBS: Vale lembrar que os dois tipos de dados armazenam: linhas, pontos, polígonos, círculos. A diferença é que: o tipo de dados geometry utiliza o plano 2d e o tipo de dados geopraphy utiliza o plano 3d. Os dados geometry e geography são abstráidos por tipos específicos, basicamente eles possuem os mesmo modo, a diferença entre eles é apenas se a criação especificada é direcionada para um plano ou espaço. · Polygon · MultiPolygon · LineString · MultiLineString · Point · MultiPoint · GeometryCollection Cada tipo corresponde á uma coleção, podemos armazenar um único ponto utilizando Point, se por acaso for útil armazenar dois pontos podemos utilizar MultiPoint o qual nos provê uma coleção de agregação dos tipos específicos, o SQL Server possuí também uma hierarquia pelo qual pode ser visto pela imagem abaixo. Polygon: Pode ser descrito como um modelo fechado, por exemplo: bola. O Polygon pode consistir em uma bola onde pode conter zero ou mais lados. MultiPolygon: Esse tipo representa uma coleção de polígonos válidos, neste caso se um polígono pelo qual estiver dentro da coleção estiver inválido a coleção estará completamente inválida. LineString: LineString é um objeto de uma dimensão pelo qual consiste em dois ou mais pontos identificados que contêm segmentos em linhas. As linhas não possuem dimensões correta, no entanto pode ser simples, complexa e fechada. MultiLineString: Este tipo representa a coleção dos objetos LineString, similar ao objeto MultiPoint, no entanto pode-se também fornecer expressões WKT sendo identificado por todos LineStrings na coleção. MultiLineString podem ser simples, interseção ou fechado. Point: Representa uma única dimensão sendo referenciado e identificado pelo par. Pode-se utilizar o Point em uma posição para identificar uma localização na superfície. MultiPoint: Representa a coleção de zero ou mais pontos, geralmente é utilizado para identificar a localização na superfície. GeometryCollection: Os tipos conforme mostrados acima é especifico para cada um, o tipo GeometryCollection pode armazenar varios outros tipos de objeto em apenas um só, por exemplo: podemos armazenar tanto LineString como Point em um único GeometryCollection. Continuaremos... []´s Lucas Souza 25 julio SQL Server 2008: Policy Management (Parte 04)A Paz do Senhor Esteja Convosco, O artigo anterior teve por objetivo de: Todos os procedimentos criados em nosso banco de dados se inicie com o prefixo usp_, já neste ultimo artigo desta série o nosso objetivo neste momento é que: Todas as tabelas precisam está dentro do schema ‘Developers’ ou ‘DBAs’. Neste momento iremos criar uma nova Condition, clique com o botão direito em Conditions em seguida New Condition Em seguida preencha os campos conforme mostra á imagem abaixo, percebam que podemos agrupar mais de um campo(field), para isso selecione os dois campos e clique com o botão direito encima de qualquer um deles em seguida Group Classes. Após termos feito a criação da nossa Condition iremos neste momento por último criar a Política, clique novamente com o botão direito em Policies em seguida New Policy Após termos definido as propriedades conforme ilustra a imagem abaixo o que resta agora é só clicarmos OK. O último passo que resta para o término da Política é: Habilitar, para isso clique com o botão direito encima da Política conforme foi criada em seguida Enable Se por acaso executarmos alguma instrução referente á CREATE TABLE e não definirmos o schema Developers ou DBAs conforme adotamos como padrão de schemas em nossa aplicação, infelizmente aplicação não irá ser bem sucedida ou melhor, nenhuma tabela irá ser criada á não ser que esteja de acordo com as regras apresentadas. Ótimo, podemos ter a convicção de que nossa aplicação ao ter recebido essas três regras se comportará de uma forma mais flexível fazendo com que assim tenhamos um ambiente mais padronizado e gerencíavel.
Lucas Souza 18 julio SQL Server 2008: Policy Management (Parte 03)A Paz do Senhor Esteja Convosco, Esses dias infelizmente estive bastante ocupado e não obtive tempo suficiente para dar continuidade á esta série de artigos, todavia peço desculpas aos caros leitores que estão diariamente acompanhando tanto o meu blog quanto aos demais sites de TI. Nosso objetivo neste momento é: (Todos os procedimentos criados em nosso banco de dados se inicie com o prefixo usp_), certa vez ao adotarmos esta regra para nosso banco de dados temos em mente já uma boa convicção, conviccção esta que todos os procedimentos armazenados(stored procedure) irão se iniciar com o prefixo USP_ e que no decorrente da nossa aplicação se precisarmos executar algum deles bastaríamos digitar EXEC USP_NOMEPROC. Primeiramente iremos criar nossa Condition, clique com o botão direito encima de Conditions em seguida New Condition.
Após isto, precisamos neste momento adotar algumas propriedades básicas, no entato faça conforme ilustra a tabela abaixo ou até mesmo a figura.
Ao termos feito isto, iremos agora criar a Política, clique com o botão direito encima de Policies em seguida New Policy.
Defina as propriedades conforme ilustra a imagem abaixo, percebam que no menu drop-down ao lado de Check Condition devemos atribuir o valor procUSP conforme é a Condition que criamos nos passos anteriores, em Evaluation Mode escolha On change: prevent, logo após clique em Description que está localizado no lado esquerdo, percebam que além de definirmos uma regra para nosso banco de dados podemos também adquerir uma categoria e assim atribuir esta categoria á uma descrição conforme pode ser definida juntamente na criação da Política.
Após isto clique em OK, neste momento o último que precisamos fazer é: Habilitar, clique com o botão direito encima e em seguida clique em Enable ![]() Figura 1.5 (Object Explorer – Policies) Ótimo, nossa política está completamente pronta basta agora só testarmos, se por acaso algum usuário em nosso banco de dados tentar criar algum procedimento armazenado sem que seguir os padrões conforme a empresa adotou ou melhor, digitar algo referente á isso: CREATE PROC DBO.SPInsert AS SELECT TOP 10 ProductID FROM Production.Product Neste momento o usuário pelo qual executou essa instrução irá se aparecer rapidamente com uma mensagem de erro, mensagem esta informando que o procedimento armazenado não poderá ser criado ao menos que esteja de acordo com as regras da empresa, ou melhor: Isto indica que todos os procedimentos armazenados deverão se iniciar com o prefixo conforme foi adotado ou então aplicação irá sofrer um rollback, ou seja, a transação não será efetuada com sucesso até que sigamos o padrão conforme a política segue, neste caso que se inicie todos os procedimentos armazenados com o prefixo usp_. Continuaremos []´s Lucas Souza 30 junio SQL Server 2008: Policy Management (Parte 02)A Paz do Senhor Esteja Convosco, No artigo anterior descrevi alguns fundamentos príncipais relacionado ao Policy Management(PM), sendo eles: arquitetura, suas limitações, seus componhentes e algumas informações básicas ao tomar quando se trabalhar com esse framework, todavia irei dar continuidade neste artigo explicando examente O que são Policies. POLICIES As Policies(Políticas) consiste em um comportamento existente definido pelo usuário, comportamento este que podem ser descritos como: · On Demand:
· On Schedule:
· On Change - Log Only:
· On Change – Prevent: Se ocorrer alguma mudança inesperada que não esteja de acordo com as regras definidas, imediatamente a transação sofrerá um rollback pelas Triggers DDL. OBS: Se a configuração do servidor estiver com a opção ‘triggers nested’ desabilitada, este comportamento não irá funcionar.
Figura 1.0 Policy Management – Conditions (continuação – artigo anterior)
Percebam que após a definição das informações adotadas em nossa Política podemos também adquerir algumas mais outras informações, sendo assim constítuida por: Categoria (Category), Descrição(Description), Exibição de Texto (Text to display), Endereço(Address) Figura 1.1 Policy Management – Conditions(Description)
CRIANDO CENÁRIO 01 – POLICY MANAGEMENT (PM) Ø OBJ: Todas as tabelas criadas em nosso banco de dados se inicie com o prefixo tbl_. Inicialmente iremos criar uma nova Condition, para isto clique com o botão direito em Conditions em seguida New Condition, defina as seguintes propriedades:
Tabela 1.0 (Propriedades - Condition) Após termos definido as propriedades ‘default’ para a nossa Condition, iremos neste momento criar á Política(Policy), clique com o botão direito encima de Policies em seguida New Policy.
Tabela 1.1 (Propriedades - Policies)
Após termos definido estas propriedades básicas, basta agora clicarmos em OK, por questão de segurança, verifique se a Política está habilitada corretamente de acordo como mostra a imagem abaixo, se sim(ok), se não(habilite).
Ótimo, temos a certeza agora que nossa Política está funcionando perfeitamente, se por acaso algum usuário que estiver conectado ao SQL Server Database Engine tentar criar alguma tabela em qualquer banco de dados em que não esteja de acordo com as regras adotadas o usuário logo irá se dar com um erro parecido com esse: Percebam que infelizmente não foi possível criar a tabela em banco de dados com o nome ‘TESTE1’, isto porque ao criamos nossa Política adotamos uma regra, regra esta que toda tabela se inicie com o prefixo ‘tbl_’, no entanto o usuário só irá conseguir efetuar a criação da tabela se estiver de acordo com as regras adotadas, porém se não for utilizado o prefixo ‘tbl_’ juntamente com a instrução CREATE TABLE, o usuário infelizmente não obterá sucesso.
[]´s Lucas Souza 25 junio SQL Server 2008: Policy Management (Parte 01)A Paz do Senhor Esteja Convosco, Há alguns dias atrás estive criando algun(s) artigos relacionado á políticas(policies) no SQL Server 2008, todavia estive estudando á fundo esse assunto e percebi que temos muita coisa ainda há se ver em relação á esse excelente framework o qual nos permite termos uma aplicação mais robusta e mais gerenciada de uma forma mais fácil. O Gerenciador de políticas (Policy Management) no SQL Server permite agora que o DBA crie as políticas e assim distribua essas políticas criadas por múltiplos servidores, essas políticas podem ser rodadas por agendamento(schedule) ou por demanda (demand) e se por acaso o usuário violar uma dessas políticas criadas, rapidamente é criado um log de violação proativo, sendo assim ocorrendo assim um rollback na transação e evitando que o usuário efetue algo que não esteja de acordo com as regras criadas pelo DBA. As políticas possuem uma arquitetura as quais são usadas para avaliar e configurar os aspectos de segurança do SQL Server, esses componentes podem ser conhecimentos como: conditions, policies e facets e são utilizados juntamente para definir as regras criadas de política no SQL Server. Figura 1.1, Arquitetura Policy Management (PM) Após termos visto a arquitetura da Policy Management (PM) podemos também obter o conhecimento de onde está localizado esse framework, como podemos ver está localizado na raíz Management > Policy Management. Figura 1.2, Localização Policy Management (PM) Certamente ao termos visto uma ‘overview’ de como funciona o Gerenciador de políticas no SQL Server podemos agora planjear algumas regras ‘default’ para que nosso banco de dados se comporte de uma maneira mais legível, por exemplo: · Todas as tabelas criadas em nosso banco de dados se inicie com o prefixo tbl_. · Todos os procedimentos criados em nosso banco de dados se inicie com o prefixo usp_. · Todas as tabelas precisam está dentro do schema ‘Developers’ ou ‘DBAs’. Através da Policy Management (PM), temos também por definição alguns outros aspectos os quais são gerenciados por entidades da própria instância em si do SQL Server, essas entidades podem ser descritas através de tabelas, schemas ou até mesmo banco de dados. Nesse caso podemos obter um exemplo de como gerenciar essas entidades, por exemplo: podemos obter um filtro para que todos os índices ao chegar á um volume de fragmentação acima 30% sejam recriados, podemos também obter outro filtro com o objetivo de que o banco de dados não cresçam acima de 1GB, entre outros. FACETS Os facets são um dos componentes da Policy Management (PM) que por sua vez tem seu objetivo de determinar como as políticas irão ser processadas após á uma operação feita pelo usuário, algumas considerações básicas em relação aos facets é: · Policy Management (PM) Possuí 74 Facets; · Não se pode criar novas Facets; · Não podem ser alteradas; · Não podem ser deletadas; · Obrigatório usar apenas as que já possuem. Figura 1.3, Policy Management (PM) Facets Existentes
Application Role: Regra de criação e modificação de data e hora; Particulamente é um ‘schema’ padrão de regras mais utilizadas em empresas; Backup Device: Tipo de dispositivo de backup; Database: Número de conexões ativas para o banco de dados; Cryptopgraphic Provider: Se as chaves assimétricas ou simétricas podem ser criadas ou importadas Database Audit Specification: Objetivo de auditar o nome da auditoria já criada ; Audit: Objetivo de auditar pasta de arquivos e também dados inseridos ou dados que não foram inseridos por motivos de falhas justas; Database Security: Se o banco de dados está selecionado como confiável; Resource Governor: Função de Classificação; Status abilitado; Table: Espaço usado pelos dados; assinado ao filegroup; se possuí um índice cluster; tamanho do índice; Stored Procedure: Contexto de execução; Informação relacionado ao ‘assembly’; se o procedimento armazenado é codificado. Os facets conforme eu citei acima geralmente são os mais utilizados hoje em dia nas aplicações comercias, no entanto existe uma definição completa para cada um deles á no books online (BOL) ou mesmo pelo site do msdn. CONDITIONS Particulamente é um grupo de uma ou mais expressão do facet definido. As conditions tem por objetivo de ir mais além de que os facets já permitem, por exemplo: se escolhermos o facet Database podemos definir na aba (Field) á variável, neste caso utilizamos @Collation, após isto podemos também definir os operadores de comparação, temos: =, !=, LIKE, IN, NOT LIKE, NOT IN e através da @Collation podemos também utilizar uma string desejada(Value), se por acaso quisermos definir uma estrutura mais complexa podemos utilizar o ‘Advanced Edit’. Figura 1.4, Policy Management (PM) Conditions (Advanced Edit) Figura 1.5, Policy Management (PM) Description Aós termos definido Nome da Condition(PolicyDatabase), Facet(Database), Facet(@Collation) e outras informações que foram necessárias para que nossa política se comporte conforme nós desejamos basta apenas clicarmos agora em OK e assim será criada a Condition, percebam que ela estará sendo criada na Raiz (Conditions) com o nome conforme citamos. Conclusão Neste artigo foi ilustrado a arquitetura da Policy Management(PM), quais são os seus três componentes, eles são: Policies(não apresentado neste artigo), Facets e Conditions, vimos também quantos e quais facets existem e algumas considerações básicas em relação á cada um deles(facet) e por último vimos também uma visão geral das Conditions á qual é um grupo de um ou mais facet definido. Continuaremos... []´s 19 junio Trabalhando com Database Snapshot (Parte 02)Boa Tarde Pessoal, No artigo anterior descrevi á respeito a estrutura interna do Database Snapshot a qual é uma feature que tem seu objetivo de ‘criar um espelhamento do banco de dados’, lembrando que o Database Snapshot está dísponivel em edições 2005 adiante, além disso uma das considerações principais é que só pode ser utiliza em versões Enterprise. Ao termos entendido rapidamente como funciona á estrutura interna dessa feature é necessário também sabermos como gerenciar-la em nossa aplicação. Para criar o Database Snapshot precisamos utilizar a instrução CREATE DATABASE em seguida utilizar a cláusula AS SNAPSHOT OF, conforme foi escrito no artigo interior uma das melhores práticas ao criarmos nosso Database Snapshot é definirmos o nome por um período, seja por horário ou por dias da semana. -- Database Snapshot Definido por tempo(horas) ( NAME = AdventureWorks2008_Data, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\Adv_Snapshot0700 .ss' ) AS SNAPSHOT OF AdventureWorks2008; GO Após termos feito a criação do nosso Database Snapshot se precisarmos por acaso efetuar alguma consulta em uma tabela dentro do banco de dados basta apenas se posicionarmos e executar o que for necessário. USE Adv_Snapshot0700 Name, ProductNumber FROM Production.Product ORDER BY Name Percebam que, me posicionei no banco de dados Snapshot ‘Adv_Snapshot0700’ conforme criei acima, se por acaso você alterar algum registro do banco de dados fonte ‘source’ o Database Snapshot não irá sofrer nenhuma alteração. Depois de termos criado o Database SnapShot se precisarmos em breve deletar basta utilizarmos a cláusula DROP DATABASE, lembrando que todos os arquivos associados ao snapshot também irá ser deletado. -- Database Snapshot | Deletado E se por acaso precisarmos restaurar o Database Snapshot já criado no nosso SGBD basta também utilizarmos a cláusula abaixo: RESTORE DATABASE DB_Snapshot0700 from DATABASE_SNAPSHOT = 'DB_Snapshot0700' GO Em muitas situações é bastante útil implementarmos essa feature, um dos cenários mais pensados e utilizados é aonde envolve um ambiente de teste á qual é utilizado apenas banco de dados e assim sofrem muitas atualizações simultâneas, todavia ao utilizar o Database Snapshot podemos obter agora uma maior confiabilidade em nossos dados, assegurando-se assim que os dados afetados pelo Database Snapshot não irá afetar o banco de dados fonte ’, sendo assim podemos obter agora um ambiente de teste mais confiável e efetuarmos o que for necessário em relação á operações de update,delete,insert. []’s 17 junio Trabalhando com Database Snapshot (Parte 01)Boa Noite Pessoal, Ultimamente tenho percebido que muitos usuários á não conhecerem o SQL Server acham que é apenas um banco de dados ou algo similar á isso, o que eu tenho á dizer é que: o SQL Server as vezes pode ir mais além do que imaginamos, sendo assim podemos utilizar essa ferramenta tanto para criar/gerenciar nossos banco de dados como também para gerar relatórios, integrar diversas outras fontes de dados, Exportar dados interno do banco para arquivos excel entre outras diversas funções, se no caso fosse descrever do que o SQL Server é capaz eu passaria a noite falando as suas funcionalidades, sendo assim posso dizer que fui igual á esses usuários em relação á não ter uma visão de que o produto oferece e hoje sei que o SQL Server vai muito mais além do que um banco de dados e ainda por sí é uma excelente ferramenta á qual nos oferece muitas features das quais podem ser utilizada dia após dia em nossa aplicação. Database Snapshot não é uma feature nova no SQL Server 2008, no entanto foi introduzida no SQL Server 2005 e está dísponivel apenas para versões Enterprise, essa feature tem seu objetivo de utilizar ‘copy-on-write’ á qual faz uma cópia do seu banco de dados e armazena na pasta ‘Database Snapshots’, todavia algumas considerações em relação á essa feature é preciso termos em mente, por exemplo: · Apenas leitura; · Visão estática do seu banco de dados; · Requer nome único; · Precisa está na mesma instância do banco.
Se por acaso depois de efetuarmos um Snapshot do nosso banco de dados original e depois executarmos alguma atualização por exemplo no banco de dados fonte, o banco de dados criado ‘Snapshot’ não irá sofrer á atualização feita pelo banco de dados fonte, todavia quando criamos um snapshot do banco de dados é criado continuamento o ‘log sequence number’ (LSN) na fonte do banco de dados e assim o SQL Server roda snapshot em modo recovery desde de que a transação não seja comitada. Esta figura representa que se nenhuma alteração for efetuada no banco de dados fonte a operação de leitura do banco de Dados Snapshot criado será igual á página original do banco de dados fontes pelo qual fizemos o Snapshot. Esta figura ilustra que após á página ter sido alterada, a operação de leitura do banco de dados Snapshot ainda irá continuar acessando a página original, a qual foi armazenada no arquivo ‘sparse’, no entanto esta figura representa a operação de leitura do Snapshot acessando a pagina depois de ter sido atualizada no banco de dados fonte.
Esta figura ilustra o modelo de dois contrastes atualizados por tamanho pelo banco de dados Snapshot.
Uma das melhores considerações ao utilizar essa feature é nomear o Database Snapshot criado com um período de tempo definido por turno ou mesmo por hora, por exemplo: Definido por tempo * BancoDeDados_Snapshot_0700; Definido por turno * BancoDeDados_Snapshot_Manha; Ao definirmos um período de intervalo correto para cada um do nosso cenário se por acaso quisermos busccar por alguma informações bastaria pegar o banco de dados correto para o nosso uso e se precisarmos buscar por alguma informação relacionada ao Database Snapshot podemos utilizar o cátalog view sys.databases, ou melhor: USE DatabaseSnapshot; SELECT * FROM sys.databases.
[]'s Lucas Souza
13 junio Utilizando a cláusula TOP no SQL ServerBoa Noite Pessoal, Tenho percebido que recentemente tenho recebido alguns emails de colegas pelos quais trabalham com C# e ASP.NET, infelizmente alguns deles estão se dando com simples problemas nos quais podem ser resolvidos utilizando funções simples, todavia sabemos que o SQL Server possuí inúmeras funções das quais podem ser bastantes úteis em nosso dia a dia. Sabemos que a cláusula TOP é frequentemente mais utilizada juntamente com a instrução SELECT, todavia uma boa dica é: definir uma variável e atribuir um valor(int) á ela ou até mesmo uma porcentagem(%) pelo qual seria o valor que estariamos atribuindo a cláusula(TOP) na instrução SELECT. Syntax : [ -- TOP - Frequentemente mais utilizado (int) (Subquery) SELECT TOP ( SELECT COUNT(ListPrice) / 5 FROM Production.Product ) ProductNumber, StandardCost, ProductID, ListPrice FROM Production.Product ORDER BY ProductNumber, StandardCost, ProductID, ListPrice
-- TOP - Frequentemente mais utilizado (Porcentagem)(Subquery) SELECT TOP ( SELECT COUNT(ListPrice) / 7 FROM Production.Product ) PERCENT Name, ModifiedDate, Color, ListPrice FROM Production.Product ORDER BY Name, ModifiedDate, Color, ListPrice
-- TOP - declaração variável (código estruturado - porcentagem) DECLARE @Variavel1 FLOAT = 2; SELECT TOP(@Variavel1) PERCENT ListPrice Name, ModifiedDate, Color FROM Production.Product ORDER BY ModifiedDate, Color -- TOP - declaração variável (código estruturado - inteiro) DECLARE @Variavel2 INT = 7 SELECT TOP (@Variavel2) ListPrice, ProductNumber, StandardCost, ProductID, ModifiedDate FROM Production.Product ORDER BY ProductNumber, StandardCost, ProductID, ModifiedDate A microsoft recomenda que sempre ao utilizar a cláusula TOP é necessário utilizarmos os parêntesis, todavia por questão de compatibilidade de scripts do SQL Server 200 e 2005, sendo assim os parêntesis não são obrigatoriamente necessário ao especificarmos a cláusula TOP. []’s Lucas Souza 10 junio Acessando metadados através de Catalog Views e Dynamic Management Views no SQL ServerO SQL Server vem sempre nos permitindo e garatindo termos um acesso mais robusto e mais vantajoso, sendo assim sempre nos oferecendo inúmeros metadados para termos um desenvolvimento mais flexível e mais fácil, todavia estes metadados podem ser descritos através de: sistemas de tabelas, databases, views entre outros. Dynamic Management views and functions geralmente é utilizado para retornar o estado de como o servidor está se comportando ao receber consultas pelas quais estão sendo executados por Users,DBA´s entre outros, sendo assim podemos utilizar-las(DMV´s) para buscarmos por: instância do servidor, diagnosticar problemas e a questão de tuning. Muitos catálogos podem serem acessados através da cláusula ‘sys’, por exemplo se quisermos buscar por uma informação (x) de uma tabela podemos utilizar o comando: SYS.TABLES do qual nos traz ‘nome da tabela (name)’, ‘id objeto(object id)’ o qual é mais utilizado para quando não temos o nome exato de uma tabela, ‘id schema (schema_id) bastante útil também para buscarmos uma referência completa nos trazendo assim tanto o schema como a a tabela se fizermos por exemplo inner join. Se por acaso em algum momento precisarmos de uma consulta que nos mostre algumas informações básicas como por exemplo: nome do schema + nome da tabela + tipo de tabela + nome de coluna, podemos utilizar uma consulta similar á essa, sendo assim você pode remover ou adicionar mais colunas conforme a sua necessidade. SELECT s.name AS schema_name, t.name AS table_name, t.type_desc AS table_type, c.name AS column_name, c.column_id, ty.name AS data_type_name, c.max_length, c.precision, c.scale, c.is_nullable FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id INNER JOIN sys.columns c ON t.object_id = c.object_id INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id AND c.user_type_id = ty.user_type_id WHERE s.name = 'Person' AND t.name = 'Address';
Certa vez pode ser útil termos um resultado conforme o que mostra na imagem acima, neste caso podemos identificar certas áreas importantes, mapea-las e aplicar o que for necessário e no momento correto.
O SQL Server provê aproximadamente 80 DMVs e DMFs á qual tem seu objetivo de nos informar metadados relacionado ao acesso interno no servidor, ultimamente os desenvolvedores ao utilizar as DMV´s e DMF´s podem ter grandes benefícios, um deles seria ‘um caminho mais curto’ neste caso ao invés de utilizarmos uma consulta complexa como era em versões anteriores podemos agora simplificar e termos um código mais’ limpo’ .
O SQL Server possuí um escopo de DMV´s e DMF´s dentro do banco de dados no servidor, sendo assim iniciando-se pelo prefixo dm_*. Sys.dm_cdc_* - Contêm informações sobre Change Data Capture (CDC) transações e log de sessões, Essa é uma nova feature do SQL Server 2008 o qual tem seu objetivo de capturar informações relacionadas ao código T-SQL; Sys.dm_exec_* - Tem seu objetivo retornar informações relacionado ao código executado pelo usuário; Sys.dm_fts_* - Tem seu objetivo retorna informações sobre a funcionalidade do Integrated Full-Text Search (iFTS), Full Text Search é um componente do SQL Server o qual possuí um grande potencial ao buscar por palavras, textos .doc, .pdf entre outros; Sys.dm_os_* - Nos mostra detalhes de baixo nível de bloqueios, memória usada e agendada; Sys.dm_trans_* - Provê informações sobre transações que estão sendo executada em tempo real e bloqueios; Sys_dm_io_* - Permite que você monitore a rede e o DISCO I/O; Sysm_dm_db_* - Retorna informações sobre banco de dados e o level dos objetos no banco.
Neste caso por exemplo podemos elaborar uma consulta que nos permita vermos o valor de cpu utilizada, memória utilizada, total de leituras, total de escritas entre outros. SELECT login_name, SUM(cpu_time) AS tot_cpu_time, SUM(memory_usage) AS tot_memory_usage, AVG(total_elapsed_time) AS avg_elapsed_time, SUM(reads) AS tot_reads, SUM(writes) AS tot_writes, SUM(logical_reads) AS tot_logical_reads, COUNT(session_id) as tot_sessions FROM sys.dm_exec_sessions WHERE session_id > 50 GROUP BY login_name;
Neste caso ao termos em mente quanto um usuário ou administrador está consumindo nas consultas diárias em nosso servidor, podemos adequirir certas permisões para evitarmos que nosso servidor sofra um gargalho inesperado, ao utilizarmos as DMV´s e DMF´s em nossa aplicação dia á dia podemos agora obter um código mais limpo e bem mais fácil de entendermos. Observação: Os catalog views não contém informações á respeito de manutenção de planos, backup, replicação ou SQL Server Agent.
[]’s 08 junio Encriptografando textos no SQL ServerBom Dia Pessoal, O SQL Server nos permite termos diversas formas de como encriptografar nossos dados, uma dessas formas seria através dos certificados, os certificados são um par de chaves assimétricas adicional sendo assim acrescentado na criação do certificado um pequeno trecho e uma data x para expiração, o SQL Server incluí também bem outras instruções no entanto essas são as mais utilizadas geralmente. O SQL Server 2008 possuí dois tipos de chaves, a chave pública standard / chave privada methodology. USE master
IF OBJECT_ID ('DB_Banco') IS NULL DROP DATABASE DB_Banco GO
CREATE DATABASE DB_Banco
USE DB_Banco
-- Criação da DMK CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@$$w0rd'
-- Criação do Certificado CREATE CERTIFICATE Certificado ENCRYPTION BY PASSWORD = 'p@$$w0rd' WITH SUBJECT = N'Certificado DB-Banco', EXPIRY_DATE = '2010-07-30'; Observação: Se por acaso não especificarmos a opção START_DATE a data atual será utilizada, sendo assim a data irá contar a expiração logo após a criação do certifiicado. Após termos feito a criação do Certificado, é bastante útil efetuamos um backup por questão de segurança. -- Backup Certificado BACKUP CERTIFICATE Certificado TO FILE = 'C:\SQLBackup\Certificado.CER' WITH PRIVATE KEY ( FILE = 'C:\SQLBackup\CertificadoKEY.PVK', ENCRYPTION BY PASSWORD = 'P@$$w0rd', DECRYPTION BY PASSWORD = 'p@$$w0rd' );
Nos exemplos que irei amostrar abaixo irei ilustrar a respeito da função EncryptByCert pelo qual aceita os seguintes tipos de dados: char, varchar, binary, nchar, nvarchar, ou binary constante, nome coluna, ou variável de texto para encriptografar. A Microsoft recomenda que devemos evitar utilizar á encriptografia assimétrica para encriptografar dados diretamente por questão de limitação de tamanho e questões de perfomance, sendo assim podemos utilizar a encriptografia assimétrica para encriptografar dados e encriptografia assimétrica para encriptografar as chaves simétricas. (Página 256) Temos no SQL Server uma função conhecida como DecryptByCert o qual descriptografa os textos que geralmente estão encriptografados por outra função também conhecida como EncryptByCert. Irei amostrar abaixo alguns exemplos de como encriptografar textos através de certificados. -- Criação de um texto em uma variável para encriptografar. DECLARE @TEXTO nvarchar(58) = N' 0032-3419-0934-9306-9361'; SELECT 'Product Serial Number: ', @TEXTO;
-- Encriptografando o texto através do certificado. DECLARE @Encrypt varbinary(128) = EncryptByCert(Cert_ID('Certificado'), @TEXTO); SELECT 'Product Serial Number: ', @Encrypt;
-- Descriptografando o texto através do certificado. DECLARE @Descrypt nvarchar(58) = DecryptByCert(Cert_ID('Certificado'), @Encrypt); SELECT 'Product Serial Number: ', @TEXTO;
-- Dropando o certificado criado DROP CERTIFICATE Certificado;
-- Dropando a chave criada DROP MASTER KEY; Podemos também utilizar as chaves assimétricas para encriptografar e descriptografar os dados, sendo assim antes de chegar aos exemplos gostaria de explicar o que seria a Chave Assimétrica.
A sintaxe para a criação dessa chave é o seguinte: -- Criação da chave assimétrica CREATE ASYMMETRIC KEY ChaveAssimetrica WITH ALGORITHM = RSA_512;
-- Declaração de uma variável com número de um cartão de crédito DECLARE @CartaoCredito nvarchar(26) = N'9000 1234 5678 9012'; SELECT @CartaoCredito
-- Encriptografando o cartão de crédito DECLARE @EncryptCartaoCredito varbinary(64) = EncryptByAsymKey(AsymKey_ID(N'ChaveAssimetrica'),@CartaoCredito); SELECT @EncryptCartaoCredito
-- Descriptografando o cartão de crédito DECLARE @Descrypt nvarchar(26) = DecryptByAsymKey(AsymKey_ID(N'ChaveAssimetrica'), @EncryptCartaoCredito); SELECT @Descrypt; -- Drop asymmetric key DROP ASYMMETRIC KEY ChaveAssimetrica;
-- Drop DMK DROP MASTER KEY; O SQL Server nos permite diversas forma para termos uma aplicação mais robusta e mais confiável, sendo assim podemos escolher qual a melhor alternativa para nosso cenário e aplicar-lo, temos também outro tipo de segurança fantástico pelo qual ja escrevi aqui no meu blog, conhecido como (TDE) Transparent Data Encryption o qual é uma nova funcionalidade do SQL Server 2008 que nos permite encriptografar nosso arquivos de dados entre outros... []’s 07 junio Utilizando Triggers no SQL Server (Overview) Parte 04 (Final)Logon Triggers:
O SQL Server nos oferece também outro tipo de gatilho, no entanto ele não é muito conhecido, porém bastante útil o qual está dísponivel em versão posteriores do SQL Server 2005 SP2. Esse gatilho é responsável por disparar operações de LOGON depois da autênticação for efetuada.
IF OBJECT_ID ('dbo.DenyLogonSchedule ') IS NOT NULL DROP TABLE dbo.DenyLogonSchedule; GO
CREATE TABLE dbo.DenyLogonSchedule ( UserId sysname NOT NULL, DayOfWeek int NOT NULL, TimeStart time NOT NULL, TimeEnd time NOT NULL, PRIMARY KEY (UserId, DayOfWeek, TimeStart, TimeEnd) );
INSERT INTO dbo.DenyLogonSchedule ( UserId, DayOfWeek, TimeStart, TimeEnd ) VALUES ( 'PublicUser', 7, '21:00:00', '23:00:00' ); GO
IF OBJECT_ID ('DenyLogons') IS NOT NULL DROP TRIGGER DenyLogons; GO
CREATE TRIGGER DenyLogons ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN IF EXISTS ( SELECT 1 FROM AdventureWorks.dbo.DenyLogonSchedule WHERE UserId = ORIGINAL_LOGIN() AND DayOfWeek = DATEPART(WeekDay, GETDATE()) AND CAST(GETDATE() AS TIME) BETWEEN TimeStart AND TimeEnd ) BEGIN ROLLBACK TRANSACTION; END; END; GO
Percebam que ter um gatilho com esse objetivo pode ser muito útil, se precisamos por exemplo definir um horário padrão para um certo usuário que possa utilizar o banco de dados para executar uma tarefa x, podemos no entanto adotar esse tipo de gatilho e alterar o que for necessário.
[]’s Lucas Souza 06 junio Utilizando Triggers no SQL Server (Overview) Parte 03
DDL Triggers: Desde a versão do SQL Server 2005 os programadores T-SQL tem á habilidade de criar gatilhos DDL que por sua vez tem o objetivo de disparar quando os eventos DDL’s dos triggers ocorrem no banco de dados ou no servidor. Os triggers DDL são úteis para evitar que ocorra mudanças inesperadas no banco de dados, mudanças essas que se referem a auditoria ou algo relacionado á isto.
IF OBJECT_ID ('dbo.DDlActionLog') IS NOT NULL DROP TABLE dbo.DDlActionLog; GO
CREATE TABLE dbo.DdlActionLog ( EntryNum int IDENTITY(1, 1) NOT NULL PRIMARY KEY, EventType nvarchar(200) NOT NULL, PostTime datetime NOT NULL, Spid int NOT NULL, LoginName sysname NOT NULL, UserName sysname NOT NULL, ServerName sysname NOT NULL, SchemaName sysname NOT NULL, DatabaseName sysname NOT NULL, ObjectName sysname NOT NULL, ObjectType sysname NOT NULL, CommandText nvarchar(max) NOT NULL ); GO
IF OBJECT_ID ('AuditCreateTable ') IS NOT NULL DROP TRIGGER AuditCreateTable;
CREATE TRIGGER AuditCreateTable ON DATABASE FOR CREATE_TABLE AS BEGIN
DECLARE @event_data xml; SET @event_data = EVENTDATA();
INSERT INTO dbo.DdlActionLog ( EventType, PostTime, Spid, LoginName, UserName, ServerName, SchemaName, DatabaseName, ObjectName, ObjectType, CommandText ) SELECT EventNode.value(N'EventType[1]', N'nvarchar(200)'), EventNode.value(N'PostTime[1]', N'datetime'), EventNode.value(N'SPID[1]', N'int'), EventNode.value(N'LoginName[1]', N'sysname'), EventNode.value(N'UserName[1]', N'sysname'), EventNode.value(N'ServerName[1]', N'sysname'), EventNode.value(N'SchemaName[1]', N'sysname'), EventNode.value(N'DatabaseName[1]', N'sysname'), EventNode.value(N'ObjectName[1]', N'sysname'), EventNode.value(N'ObjectType[1]', N'sysname'), EventNode.value(N'(TSQLCommand/CommandText)[1]', 'nvarchar(max)') FROM @event_data.nodes('/EVENT_INSTANCE') EventTable(EventNode); END; GO
Após termos criado a tabela para coletar as operações iremos nesse momento criar uma tabela de exemplo:
CREATE TABLE dbo.TableTeste (i int); GO
-- Percebam que vai nos trazer a tabela conforme criamos acima SELECT * FROM DdlActionLog
[]'s
Lucas Souza
http//www.souzalucas.spaces.live.com |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|