sql server 2008 course - cuallisys.com€¦procedimientos almacenados del sistema en sql server,...

49
1 SQL Server 2008 Course Jesus Garcia Correa [email protected]

Upload: vuongnhan

Post on 21-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

1

SQL Server 2008 Course

Jesus Garcia Correa

[email protected]

2

SET (Transact-SQL)

SET DATEFORMAT (Transact-SQL) (FECHA Y HORA)

Establece el orden de las partes correspondientes al mes, día y año de una fecha

para interpretar las cadenas de caracteres date, smalldatetime, datetime,

datetime2 y datetimeoffset.

SET DATEFORMAT dmy; GO DECLARE @datevar datetime2 =

'31/12/2008 09:01:01.1234567'; SELECT @datevar; GO

Selecciona el formato dmy

SET DATEFORMAT dmy; GO DECLARE @datevar datetime2 =

'12/31/2008 09:01:01.1234567'; SELECT @datevar; GO

Error

3

SET (Transact-SQL)

SET LOCK_TIMEOUT (INSTRUCCIONES DE BLOQUEO)

Especifica el número de milisegundos que una instrucción

espera a que se libere un bloqueo.

SET LOCK_TIMEOUT 1800

GO

En el ejemplo siguiente se establece el período de tiempo de

espera de bloqueo en 1800 milisegundos.

4

SET (Transact-SQL)

SET LANGUAGE (Transact-SQL) (OTRAS INSTRUCCIONES)

Especifica el entorno de idioma de la sesión. El idioma de la sesión determina los

formatos de datetime y los mensajes del sistema.

DECLARE @Today DATETIME

SET @Today = '12/5/2007'

SET LANGUAGE Italian

SELECT DATENAME(month, @Today) AS 'Month Name'

SET LANGUAGE us_english

SELECT DATENAME(month, @Today) AS 'Month Name'

SET LANGUAGE spanish

SELECT DATENAME(month, @Today) AS 'Month Name'

GO

5

SET (Transact-SQL)

SET CONCAT_NULL_YIELDS_NULL (OTRAS INSTRUCCIONES)

Determina si los resultados de la concatenación se tratan como valores NULL o

como valores de cadena vacía.

PRINT 'Seteando CONCAT_NULL_YIELDS_NULL ON';

GO

SET CONCAT_NULL_YIELDS_NULL ON;

GO

SELECT 'abc' + NULL ;

GO

-- SET CONCAT_NULL_YIELDS_NULL OFF

SET CONCAT_NULL_YIELDS_NULL OFF;

GO

SELECT 'abc' + NULL;

GO

6

SET (Transact-SQL)

SET NOCOUNT (Instrucciones de ejecución de consultas)

Evita que se devuelva el mensaje que muestra el recuento del número de filas afectadas por una

instrucción o un procedimiento almacenado de Transact-SQL como parte del conjunto de resultados.

USE AdventureWorks;

GO

SET NOCOUNT OFF;

GO

-- Muestra el mensaje con el numero de columnas afectadas.

SELECT TOP(5)AddressLine1

FROM Person.Address

WHERE AddressLine1 LIKE 'A%';

GO

-- No Muestra el mensaje con el numero de columnas afectadas.

SET NOCOUNT ON;

GO

SELECT TOP(5)AddressLine1

FROM Person.Address

WHERE AddressLine1 LIKE 'A%';

GO

7

SET (Transact-SQL)

SET FMTONLY (Instrucciones de ejecución de consultas)

Devuelve sólo metadatos al cliente. Se puede usar para probar el formato de la

respuesta sin ejecutar realmente la consulta.

USE AdventureWorks;

GO

SET FMTONLY OFF;

GO

SELECT *

FROM Person.Address

GO

SET FMTONLY ON;

GO

SELECT *

FROM Person.Address

GO

8

SET (Transact-SQL)

SET STATISTICS IO (Estadísticas)

Hace que SQL Server muestre información relacionada con la cantidad de actividad de disco

generada por las instrucciones Transact-SQL.

USE AdventureWorks

SET STATISTICS IO ON; -- Cambiar a OFF

GO

SELECT TOP 1000 [AddressID]

,[AddressLine1]

,[AddressLine2]

,[City]

,[StateProvinceID]

,[PostalCode]

,[rowguid]

,[ModifiedDate]

FROM [AdventureWorks].[Person].[Address]

Las estadísticas se muestran en el campo de mensaje

9

SET (Transact-SQL)

SET STATISTICS TIME (estadísticas)

Muestra el número de milisegundos necesarios para analizar,

compilar y ejecutar cada instrucción.

USE AdventureWorks

SET STATISTICS TIME ON;

GO

SELECT * from Production.ProductCostHistory

where StandardCost < 500.00

GO

SET STATISTICS TIME OFF;

GO

10

SET (Transact-SQL)

SET STATISTICS XML (estadísticas)

Hace que Microsoft SQL Server ejecute instrucciones Transact-SQL y genere información

detallada sobre cómo se ejecutaron las instrucciones en un documento XML definido

correctamente.

USE AdventureWorks

GO

SET STATISTICS XML ON;

GO

-- Primera Consulta

SELECT *

FROM HumanResources.Employee

WHERE NationalIDNumber = '509647174';

GO

-- Segunda consulta.

SELECT *

FROM HumanResources.Employee

WHERE Title LIKE 'Production%';

GO

SET STATISTICS XML OFF;

GO

11

SET TRANSACTION ISOLATION LEVEL (Transacciones)

Controla el comportamiento del bloqueo y de las versiones de fila de las

instrucciones Transact-SQL emitidas por una conexión a SQL Server.

USE AdventureWorks

GO

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

GO

BEGIN TRANSACTION;

GO

SELECT *

FROM HumanResources.EmployeePayHistory;

GO

SELECT *

FROM HumanResources.Department;

GO

COMMIT TRANSACTION;

GO

SET (Transact-SQL)

12

Procedimientos Almacenados Del Sistema

En SQL Server, muchas actividades administrativas e

informativas se pueden realizar mediante los procedimientos

almacenados del sistema. Los procedimientos almacenados

del sistema se agrupan en las categorías que aparecen a

continuación:

Procedimientos almacenados de Active Directory Se utilizan

para registrar instancias de SQL Server y bases de datos de

SQL Server en Active Directory de Microsoft Windows 2000.

Procedimientos almacenados del catálogo Se utilizan para

implementar las funciones del diccionario de datos ODBC y

aislar las aplicaciones ODBC de los cambios en las tablas

subyacentes del sistema.

13

Procedimientos Almacenados Del Sistema

En SQL Server, muchas actividades administrativas e

informativas se pueden realizar mediante los procedimientos

almacenados del sistema. Los procedimientos almacenados

del sistema se agrupan en las categorías que aparecen a

continuación:

Procedimientos almacenados de Active Directory Se utilizan

para registrar instancias de SQL Server y bases de datos de

SQL Server en Active Directory de Microsoft Windows 2000.

Procedimientos almacenados del catálogo Se utilizan para

implementar las funciones del diccionario de datos ODBC y

aislar las aplicaciones ODBC de los cambios en las tablas

subyacentes del sistema.

14

Procedimientos Almacenados Del Sistema

Procedimientos almacenados de cursor Se utilizan para implementar la

funcionalidad de variable de cursor.

Procedimientos almacenados del motor de base de datos Se utilizan para el

mantenimiento general del SQL Server Database Engine (Motor de base de datos

de SQL Server).

Procedimientos almacenados de Correo electrónico de base de datos y SQL Mail

Se utilizan para realizar operaciones de correo electrónico desde una instancia de

SQL Server.

Procedimientos almacenados de planes de mantenimiento de bases de datos Se

utilizan para configurar las tareas de mantenimiento fundamentales necesarias

para administrar el rendimiento de las bases de datos.

Procedimientos almacenados de consultas distribuidas Se utilizan para

implementar y administrar consultas distribuidas.

Procedimientos almacenados de la búsqueda de texto completo Se utilizan para

implementar y consultar índices de texto completo.

Procedimientos almacenados del trasvase de registros Se utilizan para establecer,

modificar y supervisar las configuraciones de trasvase de registros.

Procedimientos almacenados de automatización Permiten habilitar el uso de

objetos de automatización estándar en un lote estándar de Transact-SQL.

15

Procedimientos Almacenados Del Sistema

Procedimientos almacenados de administración basada en directivas Se usan

para la administración basada en directivas.

Procedimientos almacenados de replicación Se utilizan para administrar la

replicación.

Procedimientos almacenados de seguridad Se utilizan para administrar la

seguridad.

Procedimientos almacenados de SQL Server Profiler Lo utiliza SQL Server Profiler

para supervisar el rendimiento y la actividad.

Procedimientos almacenados del Agente SQL Server Los utiliza el Agente SQL

Server para administrar actividades programadas y controladas por eventos.

Procedimientos almacenados de XML Se utilizan para la administración del texto

XML.

Procedimientos almacenados extendidos generales Proporcionan una interfaz de

una instancia de SQL Server a los programas externos para diversas actividades

de mantenimiento.

16

Procedimientos Almacenados Del Catalogo

sp_column_privileges

Devuelve información acerca de los privilegios de columna de una tabla del entorno actual.

USE AdventureWorks;

GO

EXEC sp_column_privileges @table_name = 'Employee'

,@table_owner = 'HumanResources'

,@table_qualifier = 'AdventureWorks'

,@column_name = 'SalariedFlag';.

sp_databases

Enumera las bases de datos que residen en una instancia del SQL Server 2005 Database

Engine (Motor de base de datos de SQL Server 2005) o que están accesibles a través de

una puerta de enlace de la base de datos.

USE master;

GO

EXEC sp_databases;

17

Procedimientos Almacenados Del Catalogo

sp_table_privileges

Devuelve una lista de permisos de tabla (como INSERT, DELETE, UPDATE, SELECT o

REFERENCES) para la tabla o las tablas especificadas.

USE AdventureWorks;

GO

EXEC sp_table_privileges

@table_name = 'Contact%';

sp_stored_procedures

Devuelve una lista de los procedimientos almacenados del entorno actual.

USE AdventureWorks;

GO

EXEC sp_stored_procedures;

18

Procedimientos Almacenados Del Motor de DB

sp_datatype_info

Devuelve información acerca de los tipos de datos que admite el entorno actual.

USE master;

GO

EXEC sp_datatype_info;

GO

sp_clean_db_free_space

Quita la información residual que queda en las páginas de base de datos a causa de las

rutinas de modificación de datos en SQL Server. sp_clean_db_free_space limpia todas las

páginas de todos los archivos de la base de datos.

USE master

GO

EXEC sp_clean_db_free_space

@dbname = N'AdventureWorks' ;

19

Procedimientos Almacenados Del Motor De DB

sp_configure

Muestra o cambia las opciones de configuración global del servidor actual.

En este ejemplo se muestra cómo establecer y enumerar todas las opciones de

configuración. Para ver las opciones de configuración avanzadas, primero hay que

establecer en 1 el valor de show advanced option. A continuación, si se ejecuta sp_configure

sin parámetros, se mostrarán todas las opciones de configuración.

USE master; GO EXEC sp_configure 'show advanced option', '1';

Este es el mensaje: "Se ha cambiado la opción de configuración 'show advanced options' de

0 a 1. Ejecute la instrucción RECONFIGURE para instalar".

ejecutamos RECONFIGURE y se muestran todas las opciones de configuración:

RECONFIGURE;

EXEC sp_configure;

20

sp_who

Proporciona información acerca de los usuarios, sesiones y procesos actuales en una instancia de

SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft. La información

se puede filtrar para obtener sólo los procesos que están activos, que pertenecen a un usuario

específico o que pertenecen a una sesión específica.

Mostrar la lista de todos los procesos actuales

En el ejemplo siguiente se utiliza sp_who sin parámetros para informar de todos los usuarios actuales.

USE master;

GO EXEC sp_who;

GO

Mostrar un proceso de un usuario específico

En el ejemplo siguiente se muestra cómo ver información acerca de un usuario actual a partir de su

nombre de inicio de sesión.

USE master;

GO

EXEC

sp_who ‘ejemplo'; --EXEC sp_who 'active'; Todos los procesos activos

GO

Procedimientos Almacenados Del Motor De DB

21

Procedimientos Almacenados Del Sistema

Ejercicio

Utilizando procedimientos almacenados, realizar una copia de la base de datos

AdventureWorks,

22

Procedimientos Almacenados Del Sistema

Solución

use master

GO

EXEC sp_addumpdevice 'disk', 'dispositivo',

'C:\Program Files\Microsoft SQL

Server\MSSQL10_50.MSSQLSERVER2\MSSQL\DATA\dispo

sitivo.bak'

GO

BACKUP DATABASE AdventureWorks

TO dispositivo

WITH FORMAT;

GO

23

What is a Debugger?

“A software tool that is used to detect the

source of program or script errors, by

performing step-by-step execution of application

code and viewing the content of code

variables.”

-MSDN

24

T-SQL Debugging

Un debugger es una herramienta la cual permite observar

desde registros hasta el stack en tiempo real de ejecución,

funciona mediante funciones hook que se unen al kernel

permitiendo manipular los ciclos lógicos del reloj del cpu, para

manejar paso a paso la aplicación que se encuentra

debbugeando.

El debugging de SQL Server permite realizar el trazado o

debuggeo de instrucciones, triggers y procedimientos

almacenados desde el SQL Server development environment,

de igual manera se puede realizar el debugging desde Visual

Studio, sin embargo este proceso se recomienda realizar

desde el mismo SQL Studio.

25

T-SQL DebuggingSe realizara debugging básico del siguiente del siguiente procedimiento

almacenado, creamos el siguiente procedimiento almacenado:

CREATE PROCEDURE Procdebug @in INT,

@out INT out

AS

BEGIN

IF ( @in IS NULL )

SET @in = 0

WHILE ( @in < = 100 )

BEGIN

SET @out = @in

SET @in = @in + 10

PRINT CONVERT(VARCHAR, @in) + ' - ' + CONVERT(VARCHAR, @out)

END

END

26

T-SQL Debugging

Ejecutamos el procedimiento almacenado:

use master

DECLARE @out INT

EXEC Procdebug 1,@out OUTPUT

SELECT @out

El procedimiento declara 2 variables internas de tipo entero: @IN y

@OUT, si @IN es NULL, le asigna el valor ‘0’, entra en un ciclo while

que se detiene cuando @IN es mayor o igual a 100, dentro del ciclo la

variable @out adquiere el valor de @IN y posteriormente @IN se

incrementa en 10 hasta que se cumpla la condición de ser mayor o

igual a 100, los valores de ambas variables se imprimen al final de

cada ciclo.

Para debuggear línea por línea se debe presionar la tecla F11, con

esto se comienza el debug paso por paso, con F10, el debugger

avanza toda una estructura, con F9 se pueden colocar breakpoints.

Los procedimientos almacenados creados se encuentran en:

27

T-SQL Debugging

Una vez comenzado el debugg del procedimiento, se pueden observar los valores de las variables:

en tiempo de ejecución:

28

T-SQL DebuggingEjercicio:Ejercicio:

El siguiente procedimiento almacenado hace uso de la base datos AdventureWorks y lo que

hace es obtener el ID del manager de un empleado, crear el siguiente procedimiento

almacenado:

use AdventureWorks;

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE GetImmediateManager

@employeeID nchar,

@managerID INT OUTPUT

AS

BEGIN

SELECT @managerID = ManagerID

FROM HumanResources.Employee

WHERE EmployeeID = @employeeID

END

29

T-SQL DebuggingEjercicio:Ejercicio:

Para este procedimiento almacenado se utiliza como base la siguiente consulta:

SELECT ManagerID

FROM HumanResources.Employee

WHERE EmployeeID = '3‘ -- Donde 3 es el ID del empleado (numero variable)

30

Ejercicio:Ejercicio:

El procedimiento almacenado se llama de la siguiente manera:

use AdventureWorks;

DECLARE @out INT

EXEC GetInmediateManager n,@out OUTPUT

SELECT @out

Donde n=parámetro a pasar al procedimiento almacenado.

Cuando el ID es un número pequeño la consulta se realiza sin ningún problema:

T-SQL Debugging

31

T-SQL DebuggingEjercicio:Ejercicio:

Sin embargo cuando el ID es un número mas grande la consulta arroja los siguientes

problemas:

¿Cómo se debe modificar el procedimiento almacenado o la manera de llamarlo, para que el

mismo se ejecute de manera adecuada sin errores?

32

T-SQL DebuggingOtra manera de realizar el Debug de procedimientos almacenados SQL Server es mediante Visual Studio.

A continuación se explicará la manera básica de hacerlo:

Primero se necesita registrar los servidores o instancias de SQL Server a Visual Studio:

Posteriormente se agrega la conexión al actual proyecto

de Visual Studio:

33

T-SQL DebuggingUna vez realizado esto, todos los objetos de la instancia seleccionada serán visibles desde el

Server Explorer, aquí se selecciona el procedimiento almacenado que se desea debuggear:

34

T-SQL Debugging

Una vez hecho esto, el debugging de la

aplicación será posible realizarse desde

VisualStudio.NET

Ahora desde el VisualStudio.NET ya

será posible ejecutar los procedimientos

almacenados:

35

T-SQL DebuggingPara obtener los valores de las variables es posible utilizar la utilidad Quick Watch:

36

What is a Debugger? (con't)

• A debugger is not an IDE

– Though the two can be integrated, they are separate

entities.

• A debugger loads in a program (compiled executable, or

interpreted source code) and allows the user to trace through

the execution.

• Debuggers typically can do disassembly, stack traces,

expression watches, and more.

37

Why use a Debugger?• Flexible

– Allows for “live” error checking – no need to re-write and re-compile

when you realize a certain type of error may be occuring

– Dynamic

– Can view the entire relevant scope

Debugging techniques, 1

• Execution tracing

– running the program

– print

– trace utilities

– single stepping in debugger

– hand simulation

38

Debugging techniques, 2

• Interface checking

– check procedure parameter number/type (if not enforced by compiler) and value

• defensive programming: check inputs/results from other modules– documents assumptions about caller/callee

relationships in modules, communication protocols, etc

• Assertions: include range constraints or other information with data.

• Skipping code: comment out suspect code, then check if error remains.

39

Windows DebuggingDebugger Types

The two basic types of debuggers discussed here are user mode and kernel mode

debuggers.

User Mode Debuggers

The simplest form of a debugger is capable of debugging a single target user mode

(UM) process. User mode debuggers are capable of examining the program state

(running threads, memory content, registers, and kernel objects opened in the

process space) representing the debugger target. The capabilities are similar to

what the target process is capable of doing if it can execute code similar to the

code executed by the debugger.

User mode debuggers are also capable of modifying the state (changing the

thread execution order, changing registers’ content, and changing the memory

content) and being notified of special events happening in the target process. This

scenario is commonly known as live debugging because the debugger can interact

with the debugger target as long as the target process is running.

40

Windows DebuggingUser Mode Debuggers

The simplest form of a debugger is capable of debugging a single target user mode

(UM) process. User mode debuggers are capable of examining the program state

(running threads, memory content, registers, and kernel objects opened in the

process space) representing the debugger target. The capabilities are similar to

what the target process is capable of doing if it can execute code similar to the

code executed by the debugger.

User mode debuggers are also capable of modifying the state (changing the

thread execution order, changing registers’ content, and changing the memory

content) and being notified of special events happening in the target process. This

scenario is commonly known as live debugging because the debugger can interact

with the debugger target as long as the target process is running.

41

Windows Debugging

User Mode Debuggers Windows Examples:

cdb.execdb.exe (CDB) is a character-based console program that enables low-level

analysis of Windows user-mode memory and constructs.

ntsd.exentsd.exe (NTSD) is identical to CDB in every way, except that it spawns a new text

window when started. More precisely, CDB is a console application, whereas

NTSD is a GUI application that can create its own console.

windbg.exewindbg.exe (WinDbg) is a powerful graphical interface debugger with the same

debugging capabilities found in console mode debuggers, enhanced to automate

routine tasks such as examine the current call stack, view variables (including C++

objects), show the current registers, and a lot more.

42

Windows Debugging

Kernel Mode Debuggers

In contrast to user mode debuggers, kernel debuggers can inspect the computer system as a

whole, with nearly the same view as the system processor. For kernel debuggers, each

process or thread is just a collection of data structures, the memory addresses have a direct

relation with the physical memory installed on the system, and the paged out memory is not

accessible without loading it in the physical memory. The kernel mode debugger can change

the state of the entire computer and can be notified of special events. This model of

debugging is known as live kernel debugging.

Kernel debuggers are mainly used by device driver developers, but they can also

be very useful when debugging user mode applications. Several scenarios described in this

book make use of the kernel mode debuggers, even if the debugged code runs entirely in

user mode.

43

Windows Debugging

Kernel Mode Debuggers Windows Examples:

kd.exekd.exe (KD) is the kernel mode character-based debugger. It enables in-depth

analysis of kernel-mode activity on Windows and can be used to debug kernel

mode programs and drivers, to debug user mode applications, or to monitor the

behavior of the operating system itself.

windbg.exewindbg.exe (WinDbg) is also capable of kernel mode debugging. WinDbg provides

full source-level debugging for the Windows kernel, kernel-mode drivers, as well as

user mode applications running on the system. It allows you to debug any

application or kernel module in a friendly user interface by tracing the source code,

setting breakpoints based on the source content, and much more.

44

Windows Debugging

45

Windows Debugging

46

Windows Debugging

47

The Future of Debugging

• better debuggers and programs to help you

visualize your programs state

• simple model checkers

• programs keep getting bigger, finding bugs is going

to get harder!

• Parallel/distributed debuggers as we move to more

parallel/distributed systems.

48

Objetos AvanzadosCuadro de diálogo Propiedades de

conexión

Utilice este cuadro de diálogo para ver

las propiedades de la conexión actual.

Este cuadro de diálogo está disponible

cuando se hace clic en Ver

propiedades de conexión en varios

cuadros de diálogo del Explorador de

objetos. Las propiedades que

aparecen en esta página son de sólo

lectura.

Para cambiar propiedades como, por

ejemplo, Base de datos, conéctese a la

base de datos deseada con el

Explorador de objetos antes de abrir el

cuadro de diálogo Propiedades de

conexión.

49

Objetos Avanzados

Administración de Objetos Internos De cada base de datos: