Está en la página 1de 65

Sql Server

Bases de Datos
Qué es una Base de Datos
• Serie de archivos en el disco duro.
• estos archivos son espacio que se ha asignado
previamente en el disco duro para almacenar
otros objetos de Sql Server (tablas, vistas…)
– archivos principales
– archivos de datos secundarios
– archivos de registro de transacciones
Archivo de datos principal
• MDF
• es el primer archivo que se crea en la BD
• se emplea para almacenar
– objetos de usuario
• tablas, vistas, procedimientos almacenados…
• similares que se emplean para modifiar o almacenar info que ha introducido el
usuario
– objetos de sistema
• deben estar en fichero de datos principal
• contienen info que Sql Server necesita para el funcionamiento de la BD
– nombres de tabla
– ubicaciones de índices
– cuentas de usuario de la BD
– info sobre otros objetos de sistema
Archivo de datos secundario
• cuando se acaba el espacio del disdo duro que
contiene el fichero de datos principal
• NDF
– en otro disco duro
• permite almacenar datos como tablas, índices
y vistas
• NO objetos del sistema
Archivo de registro de transacciones

• actua como una copia de seguridad en línea


que almacena tansacciones
• una transacción es un grupo de comandos de
modificación de datos
– insert, update, delete
– contenido en un bloque begin tran….commit
– y se ejecuta como una unidad
• o se aplican todos los comandos de la transacción a la
BD o no se aplica ninguno
Transacciones
• Sql Server dispone de dos tipos de
transacciones
– implicitas
• cuando se envia un comando de modificación de datos
a Sql Server sin incluirlo explicitamente en un bloque
begin tran…commint
• Sql Server añade el bloque por sí mismo
– explicitas
• cuando se escriben las instrucciones begin tran y
commit al comienzo y final del bloque de instrucciones
Ejemplo de transacción explícita
• begin tran
– insert record
– delete record
• commit tran
• las transacciones NO se escriben directamente en el
archivo de BD
• cuando un ususario quiere modificar un registro en un BD
– Sql Server localiza la pagina de datos en la BD que contiene el
registro que se va a cambiar
– la carga en memoria (RAM)
• cache de datos
– Sql Server utiliza para almacenar los datos que se van a modificar
– es unas 100 veces más rápido que el disco duro
• esta memoria es volatil
– su contenido se elimina cada vez que el equipo pierde potencia
– Sql Server escribe al mismo tiempo en el registro de transacciones los cambios
realizados en la cache de datos
• Archivo de reigstro de transacciones
• LDF
• debería colocarse en un disco duro físico
distinto que el archivo de datos
• debe tener entre un 10% – 25% del tamaño
del fichero de datos
– para alojar transacciones durante una jornada
Planificación de la capacidad
• Calcular tamaño de un registro de la tabla sumando el
tamaño de cada columna de la tabla
• dividir 8092 por el tamaño de la fila y redondear el
resultado
– 8092 es la cantidad exacta de datos que puede contener una
sola página
– se redondea pq la fila puede repartirse en varias páginas
• dividir el número de filas que esperamos tener entre el
resultado anterior
– así sabremos cuantas páginas de datos se emplearan para cada
tabla
• multiplicar el resultado por 8192
– el tamaño de una página en bytes
– así sabremos exactamente los bytes que ocupará
la tabla en el disco duro.
Ejemplo
• una tabla con los siguientes campos
– codigo cliente – int (son 4 bytes)
– nombre – nvarchar (20) – son 40 bytes
– apellidos – nvarchar(20)
– dirección – nvarchar(50)
– ciudad – nvarchar(20)
– pais – char(2)
– codigo postal – char (9)
• esta tabla son 235 bytes por fila
• dividimos 8092 / 235 = 34
– 34 filas que nos caben en una sola página de datos
• Supongamos que estimamos que tendremos 10.000 filas
– 10.000/34 = 294
– 294 páginas necesitamos para guardar 10.000 registros de
esta tabla
• 294*8192
– 2.408.448 bytes
– necesitamos 2,4 MB de disco duro
Creación de BD
• Para empezar a trabajar con la base de datos
– crear el fichero de datos principal
– fichero de registro de transacciones

• Podemos hacerlo de dos maneras


– Gráficamente
• Sql Server Management Studio
– Mediante código Transact-SQL
Base de datos model
• las BD nuevas son copias de la base de datos
Model
• Model tiene todos los objetos del sistema que
necesita cualquier BD para funcionar
• Si queremos algún objeto estándar en todas las
bases de datos (una cuenta de usuario de BD,
por ejemplo)
– añadiendo este objeto a BD Model
– existirá automáticamente en todas las BD nuevas
Crear BD con Management Studio
• Inicio – Programas – Sql Server 2005 –
Management Studio
• panel de Explorador de Objetos – Bases de datos
• boton derecho – nueva base de datos
– Nombre BD : Tienda
– Propietario : sa
– Archivos de base de datos
• dos filas
• cambiamos el tamaño inicial del fichero de datos a 10
• Clic en boton de puntos de la columna
Crecimiento automatico para el fichero de
datos
– en la ventana, activa la opción Limitar el
crecimiento de archivos
– cambia el tamaño maximo a 20
– crecimiento de archivos en % 10
– si lo dejamos en No limitar
• puede llenar el disco duro
• Lo mismo para el fichero de registro
– activas habilitar crecimiento automático
– en Crecimiento de archivo
• en % 10
– En tamaño maximo
• limitar a 2
• Casilla Usar indización de texto
– Activada
– nos permite agilizar la búsqueda en la BD
• Página Opciones
– Intercalación : servidor predeterminado
– Modelo de recuperación : Compelta
• Ya está
• listo para llenar la BD de objetos
• pero qué ha pasado en realidad??
• lo podemos ver mejor con T-Sql
Crear BD con Transact-SQL
• Management Studio
• Conectados utilizando Autentificación de
Windows
• menu Archivo – Nuevo – Nueva consulta con
conexión actual
Teoría – sintaxis T-Sql
CREATE TABLE
    [ database_name . [ schema_name ] . | schema_name . ] table_name
        ( { <column_definition> | <computed_column_definition>
                | <column_set_definition> }
     [ <table_constraint> ] [ ,...n ] )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup
| "default" } ]
[ { TEXTIMAGE_ON { filegroup | "default" } ]
[ FILESTREAM_ON { partition_scheme_name | filegroup
| "default" } ]
[ WITH ( <table_option> [ ,...n ] ) ]
[;]
 
<column_definition> ::=
column_name <data_type>
[ FILESTREAM ]
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]
    [
[ CONSTRAINT constraint_name ] DEFAULT constant_expression ]
| [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ]
]
    [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]
    [ SPARSE ]
 
<data type> ::=
[ type_schema_name . ] type_name
[ ( precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
 
<column_constraint> ::=
 
• database_name
– Es el nombre de la base de datos en que se crea la
tabla. database_name debe especificar el nombre de
una base de datos existente. Si no se
especifica,database_name utiliza de manera
predeterminada la base de datos actual. El inicio de
sesión de la conexión actual debe estar asociado a un
identificador de usuario existente en la base de datos
especificada por database_name, y ese identificador
de usuario debe tener permisos CREATE TABLE.
• schema_name
– Es el nombre del esquema al que pertenece la nueva
tabla.
• table_name
– Es el nombre de la nueva tabla. Los nombres de tablas
deben seguir las reglas de
los identificadores. table_name puede contener un
máximo de 128 caracteres, excepto para los nombres de
tablas temporales locales (nombres precedidos de un
único signo de número #), que no pueden superar los 116
caracteres.
• ON { <partition_scheme> | filegroup | "default" }
– Especifica el esquema de partición o el grupo de archivos en que
se almacena la tabla. Si se especifica <partition_scheme>, la
tabla será una tabla con particiones cuyas particiones se
almacenan en un conjunto de uno o más grupos de archivos
especificados en <partition_scheme>. Si se especifica filegroup,
la tabla se almacena en el grupo de archivos con nombre. El
grupo de archivos debe existir en la base de datos. Si se
especifica "default" o si ON no se especifica en ninguna parte, la
tabla se almacena en el grupo de archivos predeterminado. El
mecanismo de almacenamiento de una tabla según se especifica
en CREATE TABLE no se puede modificar posteriormente.
Ejemplo
• CREATE DATABASE Tienda2
• ON PRIMARY
• (name = Tienda2,
– filename =‘c:\Archivos de programa\Microsoft SQL
Server\MSSQL.1\MSSQL\data\Tienda2.mdf’,
– size=10MB,
– maxsize=15MB,
– filegrowth=1MB)
• LOG ON
• (name = Tienda2_log,
– filename =‘c:\Archivos de programa\Microsoft SQL
Server\MSSQL.1\MSSQL\data\Tienda2.ldf’,
– size=2MB,
– maxsize=3MB,
– filegrowth=10%)
• en el panel de resultados
– parte inferior de la ventana de consulta
– mensaje si está ok o error

• Explorador objetos – Bases de datos


– debemos ver Tienda2
Modificación de BD
• Al ser copia de Model
– tienen opciones estándar que controlan su
comportamiento
– se pueden cambiar
– tb cambiar el tamaño de la BD para expandir o
reducirla
• expandirla incluso a otro disco duro
– archivos secundarios
Configuración opciones de BD
• Configuramos algunas opciones que traen las
BD como “extras”
• boton derecho en BD – Propiedades – Página
Opciones
Nivel de compatibilidad
• permite que la BD se comporte como una
versión anterior de Sql Server
Actualizar estadísticas automáticamente

• en true – actualiza cada cierto tiempo


• false – debemos actualizar a mano
• podemos desactivar esta opción si no hay
muchos recursos de sistema
– Ram o tiempo en Cpu
• luego creamos un plan de mantenimineto de
BD para que haga esta tarea con cierta
programación
Cerrar automáticamente
• cuando un usuario se conecta a una Bd debe
estar abierta
• al salir el ultimo usuario, se cierra
• En aplicaciones de escritorio – true
– así se cierra cuando no esté en uso
• en otras versiones, podemos dejarlo en false
– para que no tengan que estar abriendo y cerrando
Cerrar estadisticas automáticamente
• si hacemos una consulta y va a al servidor
– intercepta y optimizador de consultas
• encontrar la manera más rápida de devolver los resultados

• True – crea automáticamente estadisticas para


cualquier columna
• False – debemos crear nuestras propias estadisticas
– ahora mejor true hasta que manejes Sql Server con el
optimizador de consultas
Reducir automáticamente
• si la BD tiene más de 25% de espacio libre
– Sql Server la recorre y la reduce (si es True)
– Podemos dejarlo en False y luego reducimos las
BD a mano
Cierre del curso al confirmar habilitado
• cursor
– subconjunto de un conjunto de resultados
– devuelven filas individuales cada vez
– aceleran la obtención de datos si los conjuntos de resultados
son grandes
• True
– se cierran cuando se confirman las transacciones
– mejor dejarlo en False
• estarán abiertos hasta que se completen las modificaiones de
datos
• el cursor se puede cerrar después a mano
Cursor predeterminado
• Local
– cualquier curso que se cree será local para el
procedimiento que lo haya llamdo
• Global
– cualquier otro procedimiento empleado por la
misma conexión puede usar el cursor creado
BD de solo lectura
• no se puede escribir en ella
• Efectos
– se omiten durante la recuperación automática
• proceso del inicio del sistema que verifica que todas las transacciones
confirmadas se han escrito en todas las bases de datos
– Sql Server impone bloqueos a los datos que se leen en una BD
estandar
• para que usuarios no modifiquen datos que otros leen
• si es solo lectura
– no hay ningun bloqueo
– acelera el acceso a los datos

• las BD que no cambien a menudo pueden ser de solo lectura


Estado de BD
• No se puede editar
• muestra el estado de la BD
– emergency
• se ha puesto en este estado para solucionar problemas
• BD solo lectura
• registro está deshabilitado
• acceso está limitado solo a administradores
– normal
• funciona sin problemas
– offline
• se ha cerrado correctamente y NO se puede modificar
– suspect
• hay un problema en BD
• se debe comprobar y restaurarla a partir de una copia de seguridad
Restringir acceso
• Controla usuarios que pueden acceder a BD
– Multiple
• permite a todos los usuarios con permiso acceder
– Single
• solo un usuario al mismo tiempo
• el usuario puede ser cualquiera
– Restricted
– hay un grupo db_owner
» estos miembros tienen un control administrativo de su BD
– Db_creator
– Sysadmin
» control administrativo sobre todas las bases de datos del servidor
• solo miembros de estos tres grupos tienen acceso
• se usa al principio o cuando hay que cambiar la estructura de objetos de BD (añadir
una columna a una tabla)
Verificación de páginas
• si algo falla
– Sql Server No puede escribir datos en disco
– error E/S disco
– esta opción permite recuperar
• Checksum
– ordena a Sql Server crear un valor de suma de comprobación para toda la página de
datos
– cuando la pagina se lee despues, se compara
– si coinciden la pagina está bien
– esta opción detecta la mayoría de errores de página
– es la opción recomendada
• TornPageDetection
– igual que escribe un bit
• None
Advertencias ANSI habilitadas
• si haces operaciones no validas
– dividir algo por cero
• error
– con False NO da error
– si true …muestra una advertencia

– false predeterminado
Anulación aritmética habilitada
• True
– n error de desbordamiento o de división por cero
terminará la consulta o proceso por lotes.
– Si el error se produce en una transacción, ésta se
revierte.
• False
– aparece un mensaje de advertencia
– pero la consulta, proceso por lotes o transacción
continúa como si no ocurriera ningún error.
Anulación exacta numérica
• cómo se gestionan los errores de redondeo
• True
– error cuando se produce una périda de precisión
en una expresión
• False
– no mensajes de error
– el valor se redondea con la precisión de la
columna o variable que contiene el resultado
Concatenar valores Null produce Null

• cuando + dos cadenas


– hola + juan
• hola juan
– hola + null
• true
– null
• false
– hola

– false predeterminada
Desencadenadores recursivos habilitados

• Desencadenador
– guardián de la tabla
– se pueden definir para activarse cuando insertar,
actualiza, elimina datos…

• True
– un desencadenador puede activar a otro
• ejemplo
– cambio datos en clientes que afectan a pedidos
– es complejo
– solo usarlo cuando se entienda bien
Identificadores entre comillas habilitados

• entre corchetes []
– nombre de tabla con espacios
– usar palabras clave reservadas
• check, public…

• True
– tb podemos usar comillas dobles
Null ANSI predeterminado
• al crear tablas
– podemos especificar si columnas pueden estar
vacias
• condición conocida como valor nulo

• True: pueden contener valores nulos


Relleno ANSI habilitado
• cómo se llena el contenido de una columna
con valores pequeños
Valores NULL ANSI habilitados
• True
– comparación con un valor nulo
• nulo
• False
– comparación con datos que no sean unicode con
valores nulos
• False

Predeterminado False
Unicode
• sistema que asigna el mismo número para
cada carácter o letra.
• los datos unicode almacenan caracteres que
usan 2 bytes (16 bits) en lugar de un byte (8
bits) que es lo normal.
Cambio de tamaño de una BD
• ya en producción
• se va llenando
– variar tamaño de BD
• más grande o más pequeña
Expandir archivo de datos original
• permitir crecimento automático
– maxsize
– filegrowth
• si alcanza restricción establecida
– y necesitamos expandirla más
– dos opciones
• aumentar el tamaño del fichero existente
• añadiendo ficheros de datos secundarios
Aumentar tamaño de BD
• Bases de datos – boton drecho – Propiedades
• en la columna Seleccionar una página –
Archivos
• en columna tamaño inicial
– cambiamos a 15 y 3
• clic en boton de crecimiento automatico
– en log
• pasamos a Tamaño maximo del archivo a 4
Añadir fichero de datos secundarios y registro
de transacciones
• si el disco está muy lleno
– hacemos un fichero secundario en otro disco
– en Archivo – agregar
• fichero2
– otra vez agregar
• ficherolog2
– Aceptar
Adición de grupos de archivos
• podemos agrupar lógicamente cada grupo de
archivos para administrar la asignación de
espacio en disco
• por defecto
– archivos de datos se colocan en grupo Primary
Ejemplo
• Tenemos una BD con varias tablas
– unas para lectura
– otras para escritura

– si creamos un fichero secundario y los ponemos en


diferentes discos
• controlas dónde se crean cada objeto
– el primer fichero de datos secundario en un grupo llamado lectura
– el segundo fichero de datos secundario en un grupo llamado
escritura
Crear fichero de datos secundario en un
grupo llamado lectura
• Bases de datos – boton derecho –
Propiedades – pagina grupos de archivo
– agregar
• nombre – lectura
– en la pagina Archivos
• columna grupo de archivo - lectura
Reducir ficheros de datos
• Base de datos – boton derecho – Tareas –
Reducir – Base de datos
• se pueden aceptar las opciones
predeterminadas de la ventana
• Aceptar
Eliminar una BD
• Boton derecho en BD – Eliminar
• en ventana
– activamos las opciones de eliminar copia …
• libera espacio de la base de datos msdb
– se almacena el historial
– Cerrar conexiones
• desconectar a los usuarios de la BD

la eliminación es una acción permanente


Instantáneas de BD
• imagen de BD en un punto de tiempo concreto.
– se puede hacer tb con una copia de seguridad y luego
recuperar pero consume más recursos

• al crear instantanea
– conjunto de punteros a las páginas de BD original
– Modificaciones en BD original
– antes de modificación
• datos de página se copian en al archivo de instantanea
– la pagina original sigue existiendo
Utilidad
• archivar datos historicos a los que debamos tener
acceso
– instantanea de base de datos financiera cada trimestre
• para volver a una copia anterior de una BD en caso
de error o pérdidas de datos
• aumentar el rendimiento cuando se emplean para
generar informes
– mientras se leen datos de instantanea se puede seguir
escribiendo en la BD original
Creación instantanea
• Management Studio
• menu archivo – nueva – consulta con conexión
actual
Sintaxis
• CREATE DATABASE Instantanea_1
• ON
• (
– name = Ventas,
– filename=‘c:\Archivos…. \data\Instantanea_1.mdf’
)
as snapshot of Tienda
• en el panel de resultados debe salir mensaje
OK
• en el Explorador de objetos
– Instantaneas de bases de datos

También podría gustarte