Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 04

Boa Noite Pessoal,

Essa parte do simulado irá dar continuidade ao tópico "Implementing Programming Objects".

Questão 030
Quais das seguintes tabelas podem ser utilizadas dentro de uma trigger ? Marque todas que se aplicam

A. INSERTED
B. UPDATED
C. DELETED
D. OUTPUT
E. VERSIONED (apenas se o nível de isolamento for SNAPSHOT)
F. OLD
G. NEW

Questão 031
O implementador de banco de dados criou uma tabela de Clientes com a opção SET ANSI_NULL_DFLT_ON conforme o script abaixo:

CREATE TABLE Clientes (
    IDCliente INT NOT NULL,
    NomeCliente VARCHAR(60) NOT NULL,
    Renda MONEY,
    CPF CHAR(11) NOT NULL,
CONSTRAINT PK_Cliente PRIMARY KEY (IDCliente),
CONSTRAINT CK_Renda CHECK (Renda > 0))

A tabela possui uma CHECK Constraint e uma trigger AFTER. A CHECK Constraint verifica se a coluna "Renda" é maior que zero e a trigger faz um registro em uma tabela de auditoria informando o nome do operador que fez o cadastro. Acidentalmente um operador fez dois cadastros atípicos. No primeiro cadastro ele informou a renda igual a zero e no segundo a renda nula. Qual é o efeito esperado ?

A. Ocorrerá um erro nos dois cadastros, mas a trigger irá disparar em ambos os cadastros
B. Ocorrerá um erro nos dois cadastros e a trigger não irá disparar em ambos os cadastros
C. O 1º cadastro será rejeitado e o 2º permitido e haverá disparo da trigger em ambos os cadastros
D. O 1º cadastro será permitido e o 2º rejeitado e haverá disparo da trigger em ambos os cadastros
E. O 1º cadastro irá falhar e a trigger não será disparada. O segundo cadastro será feito normalmente com disparo da trigger

Questão 032
Você é um implementador de banco de dados de uma companhia de seguros. As informações sobre as apólices de seguro são armazenadas em um banco SQL Server 2008. Você criou uma tabela chamada Apolice para esse banco de dados através do script a seguir:

CREATE TABLE Apolice (
    NumeroApolice INT NOT NULL DEFAULT (0),
    SobreNomeSegurado VARCHAR(50) NOT NULL,
    PrimeiroNomeSegurado VARCHAR(50) NOT NULL,
    AniversarioSegurado DATE NOT NULL,
    DataApolice DATE NOT NULL,
    ValorFace MONEY NOT NULL,
    CONSTRAINT PK_Apolice PRIMARY KEY (NumeroApolice))

Cada vez que a companhia vender uma nova apólice, a apólice deve receber um número único. O banco de dados deve atribuir o novo número da apólice assim que ela for cadastrada. O que você deve fazer ?

A. Criar uma trigger Instead Of Insert para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
B. Criar uma trigger Instead Of Update para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
C. Criar uma trigger After Update para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
D. Substituir o Default por uma trigger AFTER INSERT que gere o número da apólice e incluir o número gerado juntamente com os dados da tabela  INSERTED na tabela Apolice

Questão 033
Quais dos comandos abaixo não podem ser executados dentro de uma trigger DML ? Marque todas que se aplicam

A. TRUNCATE TABLE
B. ALTER DATABASE
C. EXEC PROCEDURE
D. XP_CMDSHELL
E. RECONFIGURE
F. SELECT * FROM
G. CREATE DATABASE

Questão 034
Você é o arquiteto do time de desenvolvimento de uma empresa atuante no mercado financeiro. Foi requerido de você uma forma de auditar todas as alterações nas estruturas das tabelas de um banco de dados chamado AnaliseCredito. Qual a melhor implementação para atender a essa necessidade ?

A. Triggers DML
B. Logon Triggers
C. DDL Triggers
D. Schema Triggers
E. System Triggers

Questão 035
Qual das alternativas abaixo pode ser utilizada para recuperar dados sobre objetos alterados dentro de uma trigger DDL após o seu disparo ?

A. INSERTED
B. DELETED
C. UPDATED
D. EVENTDATA()
E. METADATA()

Questão 036
Na fábrica de software onde você trabalha surgiu um projeto em SQL Server 2008 que irá manipular dados de planilhas em Excel. Como o Integration Services não está disponível, a manipulação desses dados será feita através de CLR. Uma função irá ler dados de planilhas em Excel, efetuar alguns cálculos estatísticos e retornar os dados para o SQL Server. Você necessita registrar o Assembly no SQL Server através da instrução CREATE ASSEMBLY da forma mais segura possível. Qual permissão deve ser utilizada ?

A. SAFE
B. EXTERNAL_ACCESS
C. UNSAFE
D. DEFAULT

Questão 037
Você é um programador da equipe de desenvolvimento de software de uma empresa de E-Commerce e necessita implementar um função que implemente o algoritmo HASH MD5 para criptografar dados sigilosos. Qual implementação deveria ser utilizada ?

A. CLR Function
B. CLR Stored Procedure
C. CLR User Defined Type
D. Nenhuma das anteriores, pois, a função HashBytes é nativa do SQL Server e pode implementar o algoritmo MD5

Respostas

Questão 030
Quais das seguintes tabelas podem ser utilizadas dentro de uma trigger ? Marque todas que se aplicam

A. INSERTED
B. UPDATED
C. DELETED
D. OUTPUT
E. VERSIONED (apenas se o nível de isolamento for SNAPSHOT)
F. OLD
G. NEW

Respostas Corretas: A, C
Explicação: A tabela INSERTED e DELETED são um tipo especial de tabelas temporárias que podem ser acessadas dentro de uma trigger. A estrutura dessas tabelas é exatamente a mesma da tabela onde a trigger foi criada. A tabela INSERTED possui os registros criados após um evento de INSERT e a tabela DELETED possui os registros excluídos após um evento de DELETE. Para eventos de UPDATE, a tabela INSERTED contém os registros afetados com seus respectivos valores após a alteração enquanto que a tabela DELETE contém os registros afetados com seus respectivos valores antes da alteração.

Respostas Incorretas: B, D, E, F, H
Nenhuma dessas tabelas existe dentro de triggers no SQL Server.

Questão 031
O implementador de banco de dados criou uma tabela de Clientes com a opção SET ANSI_NULL_DFLT_ON conforme o script abaixo:

CREATE TABLE Clientes (
    IDCliente INT NOT NULL,
    NomeCliente VARCHAR(60) NOT NULL,
    Renda MONEY,
    CPF CHAR(11) NOT NULL,
CONSTRAINT PK_Cliente PRIMARY KEY (IDCliente),
CONSTRAINT CK_Renda CHECK (Renda > 0))

A tabela possui uma CHECK Constraint e uma trigger AFTER. A CHECK Constraint verifica se a coluna "Renda" é maior que zero e a trigger faz um registro em uma tabela de auditoria informando o nome do operador que fez o cadastro. Acidentalmente um operador fez dois cadastros atípicos. No primeiro cadastro ele informou a renda igual a zero e no segundo a renda nula. Qual é o efeito esperado ?

A. Ocorrerá um erro nos dois cadastros, mas a trigger irá disparar em ambos os cadastros
B. Ocorrerá um erro nos dois cadastros e a trigger não irá disparar em ambos os cadastros
C. O 1º cadastro será rejeitado e o 2º permitido e haverá disparo da trigger em ambos os cadastros
D. O 1º cadastro será permitido e o 2º rejeitado e haverá disparo da trigger em ambos os cadastros
E. O 1º cadastro irá falhar e a trigger não será disparada. O segundo cadastro será feito normalmente com disparo da trigger

Resposta Correta: E

Explicação: Triggers AFTER são disparadas após o evento de origem ter sido executado. Se uma CONSTRAINT for violada (PK, FK, NOT NULL, Check, etc) o evento não será concluído e por isso uma trigger AFTER não poderá ser disparada. No caso do 1º cadastro a renda é igual a zero e portanto a Check Constraint é violada. Essa violação irá impedir que o registro seja inserido e a trigger não será disparada. No caso do 2º cadastro, a renda nula é permitida, pois, por padrão CHECK Constraint não rejeitam registros nulos (a menos que se coloque essa restrição na especificação da CHECK Constraint). O uso da opção SET ANSI_NULL_DFLT_ON garante que a coluna foi criada de forma a permitir valores nulos e portanto o 2º registro será considerado válido. Uma vez que o registro foi realizado sem violar constraints, a trigger será disparada para o 2º cadastro.

Respostas Incorretas: A, B, C, D

A, B, C, D – A constraint CK_Renda só será violada no primeiro cadastro incorrendo em erro. Como a coluna Renda permite valores nulos, no segundo cadastro não haverá violação da constraint e não irá ocorrer um erro havendo assim disparo da trigger apenas para o segundo cadastro.

Questão 032
Você é um implementador de banco de dados de uma companhia de seguros. As informações sobre as apólices de seguro são armazenadas em um banco SQL Server 2008. Você criou uma tabela chamada Apolice para esse banco de dados através do script a seguir:

CREATE TABLE Apolice (
    NumeroApolice INT NOT NULL DEFAULT (0),
    SobreNomeSegurado VARCHAR(50) NOT NULL,
    PrimeiroNomeSegurado VARCHAR(50) NOT NULL,
    AniversarioSegurado DATE NOT NULL,
    DataApolice DATE NOT NULL,
    ValorFace MONEY NOT NULL,
    CONSTRAINT PK_Apolice PRIMARY KEY (NumeroApolice))

Cada vez que a companhia vender uma nova apólice, a apólice deve receber um número único. O banco de dados deve atribuir o novo número da apólice assim que ela for cadastrada. O que você deve fazer ?

A. Criar uma trigger Instead Of Insert para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
B. Criar uma trigger Instead Of Update para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
C. Criar uma trigger After Update para gerar o número da apólice e incluir o número gerado juntamente com os dados da tabela INSERTED na tabela Apolice
D. Substituir o Default por uma trigger AFTER INSERT que gere o número da apólice e incluir o número gerado juntamente com os dados da tabela  INSERTED na tabela Apolice

Resposta Correta: A

Explicação: Esse cenário impõe a unicidade do número da apólice através da constraint PK_Apolice. Para que a constraint não seja violada é preciso que o número da apólice seja gerado antes do evento de INSERT. Isso pode ser obtido através de uma trigger Instead Of Insert, ou seja, ao invés do INSERT. A trigger pode gerar o número e juntamente com os demais dados presentes na tabela INSERTED efetuar a inserção na tabela Apolice. Embora o uso de uma trigger possa ser utilizado nesse caso, recomenda-se o uso da propriedade Identity para que o número seja gerado sequencialmente. O uso do Identity possui menos overhead que uma trigger.

Respostas Incorretas: B, C, D

B – Uma trigger Instead Of Update pode ser utilizada para substituir o evento de Update. Entretanto, quando uma apólice é vendida, os dados serão inseridos ao invés de atualizados. Assim sendo a trigger de Update não irá disparar, pois, não ocorreu um evento de update.

C – Uma trigger After Update é utilizada para executar uma ação após um comando de update ter ocorrido. Como a venda da apólice incorre em uma inserção de dados e não em uma atualização de dados, a trigger não seria disparada.

D – A coluna NumeroApolice é NOT NULL e a remoção do DEFAULT irá impedir que o INSERT seja executado já que por ser chave primária essa coluna não aceita valores nulos. Como a trigger AFTER INSERT é executa após o evento de INSERT e o NOT NULL não permitirá que esse ocorra, a trigger não irá disparar. Na hipótese do DEFAULT ser mantido, uma trigger After Insert poderá gerar o número após o evento de INSERT ter ocorrido. Como a ação da trigger AFTER é executada após a ocorrência do evento de INSERT, não há garantias de que a constraint PK_Apolice não seja violada. Caso a constraint PK_Apolice seja violada, a trigger não será disparada e o número não será gerado.

Questão 033
Quais dos comandos abaixo não podem ser executados dentro de uma trigger DML ? Marque todas que se aplicam

A. TRUNCATE TABLE
B. ALTER DATABASE
C. EXEC PROCEDURE
D. XP_CMDSHELL
E. RECONFIGURE
F. SELECT * FROM
G. CREATE DATABASE

Respostas Corretas: B, E, G

Explicação: As triggers por padrão não suportam que os comandos ALTER DATABASE, RECONFIGURE e CREATE DATABASE sejam incluídos em seu escopo. Esses comandos além de não serem tolerados em triggers também não podem estar inclusos em um contexto transacional.

Respostas Incorretas: A, C, D, F

A, C, D, F – Todos esses comandos podem estar dentro do corpo da trigger sem restrições

Questão 034
Você é o arquiteto do time de desenvolvimento de uma empresa atuante no mercado financeiro. Foi requerido de você uma forma de auditar todas as alterações nas estruturas das tabelas de um banco de dados chamado AnaliseCredito. Qual a melhor implementação para atender a essa necessidade ?

A. Triggers DML
B. Logon Triggers
C. DDL Triggers
D. Schema Triggers
E. System Triggers

Resposta Correta: C

Explicação: Triggers DDL reagem a eventos DDL (Data Definition Language). Os eventos DDL mais comuns são instruções de CREATE, ALTER e DROP. A trigger DDL é disparada logo após a ocorrência de um desses eventos. Para monitorar alterações contra tabelas, as triggers DDL contém os eventos CREATE_TABLE, ALTER_TABLE e DROP_TABLE. Além do uso de triggers DDL, é possível adotar outras soluções como SQL Trace, Event Notification, etc.

Respostas Incorretas: A, B, D, E

A – Triggers DML reagem a eventos DML (Data Manipulation Language). Eventos DML são aqueles de manipulação de dados e são normalmente representados pelos comandos INSERT, UPDATE e DELETE. Instruções DML podem atuar sobre os dados de uma tabela, mas não sobre suas estruturas.

B – Logon Triggers são disparadas quando um login autentica-se no SQL Server. Esse tipo de trigger é útil para monitorar acessos ao SQL Server, mas não é capaz de auditar alterações nas tabelas de um banco de dados específico.

D – Não existem triggers do tipo Schema

E – Não existem triggers do tipo System

Questão 035
Qual das alternativas abaixo pode ser utilizada para recuperar dados sobre objetos alterados dentro de uma trigger DDL após o seu disparo ?

A. INSERTED
B. DELETED
C. UPDATED
D. EVENTDATA()
E. METADATA()

Resposta Correta: D

A função EVENTDATA() retorna um documento XML contendo vários dados sobre o evento que disparou a trigger, os objetos afetados, horário, etc.

Respostas Incorretas: A, B, C, E

A, B – As tabelas INSERTED e DELETED são utilizadas para capturar dados oriundos de operações DML e não estão disponíveis em triggers DDL.

C – Não existe a tabela UPDATED dentro de triggers no SQL Server

E – Não existe uma função METADATA() no SQL Server

Questão 036
Na fábrica de software onde você trabalha surgiu um projeto em SQL Server 2008 que irá manipular dados de planilhas em Excel. Como o Integration Services não está disponível, a manipulação desses dados será feita através de CLR. Uma função irá ler dados de planilhas em Excel, efetuar alguns cálculos estatísticos e retornar os dados para o SQL Server. Você necessita registrar o Assembly no SQL Server através da instrução CREATE ASSEMBLY da forma mais segura possível. Qual permissão deve ser utilizada ?

A. SAFE
B. EXTERNAL_ACCESS
C. UNSAFE
D. DEFAULT

Resposta Correta: B

Explicação: Como a função CLR irá manipular arquivos, é necessário acesso ao sistema de arquivos (FileSystem). As opções EXTERNAL_ACCESS e UNSAFE permitem o acesso ao sistema de arquivos, porém a opção UNSAFE é menos segura por permitir acesso irrestrito incluse a código não gerenciado incorrendo em maiores riscos. A opção EXTERNAL_ACCESS é uma alternativa mais segura.

Respostas Incorretas: A, C, D

A – A opção SAFE é a mais segura, porém ela não concederá acesso ao sistema de arquivos que é necessário para o funcionamento correto da função.

C – A opção UNSAFE permitirá acesso ao sistema de arquivos, porém é uma alternativa menos segura que a opção EXTERNAL_ACCESS.

D – As opções DEFAULT e SAFE são idênticas e não permitem acesso ao sistema de arquivos.

Questão 037
Você é um programador da equipe de desenvolvimento de software de uma empresa de E-Commerce e necessita implementar um função que implemente o algoritmo HASH MD5 para criptografar dados sigilosos. Qual implementação deveria ser utilizada ?

A. CLR Function
B. CLR Stored Procedure
C. CLR User Defined Type
D. Nenhuma das anteriores, pois, a função HashBytes é nativa do SQL Server e pode implementar o algoritmo MD5

Resposta Correta: D

Explicação: A função HashBytes é capaz de aplicar um algoritmo de Hash sobre uma coluna do tipo VARCHAR, NVARCHAR ou VARBINARY e dispõe dos algoritmos MD2, MD4, MD5, SHA e SHA1. Embora seja possível implementar esse algoritmo através do CLR, a presença de uma função nativa é normalmente mais performática e evita esforço adicional de desenvolvimento e manutenção de código.

Respostas Incorretas: A, B, C

A – Se não houvesse uma função nativa que retorno o hash MD5, possivelmente o uso de uma CLR function seria o mais indicado. Entretanto, a presença de uma função nativa torna o uso do CLR desnecessário nesse caso.

B – O uso de uma stored procedure em CLR poderia ser utilizado para esse fim, mas normalmente uma função seria uma implementação mais indicada que uma stored procedure. Entretanto, a presença de uma função nativa dispensa o uso de uma stored procedure em CLR.

C – Um tipo de dados em CLR não é adequado nesse caso, visto que a aplicação de um algoritmo hash MD5 representa apenas um único método. Além do mais, a presença de uma função nativa dispensa o uso de CLR para esse fim.

[ ]s,

Gustavo

Uma resposta para “Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 04

  1. Itamar dos Santos

    Muito bom.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s