Módulo 7 Administración n de bases de datos Creación de Bases de DatosD Armando Vega A.
Objetivos del módulo Crear y modificar base de datos Entender las opciones de base de datos Monitorear el espacio de las bases de datos Manejar la asignación de espacio del log de transacciones Entender el mapeo de bases de datos a tablas del sistema sysdatabases sysdevices
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Que sucede cuando se crea una base de datos? model New database master Logical device Physical database
create database Sintaxis: create database database_name [on database_device [= size] [,database_device = size]]...] [log on database_device = [size]]...] Ejemplos: (1) create database pubs2 (2) create database salesdb on data_dev1=5 (3) create database salesdb on data_dev1=5 log on log_dev1 = 2 size es especificado en megabytes
Prerequisitos al crear base de datos Antes de crear base de datos, decida: El tamaño de la base de datos La ubicación y el espacio necesario Si un dispositivo de log es necesario y, si lo es, de que tamaño Se debe estar en la base de datos master para ejecutar el comando create database Database size Database name Database location Location of log 5 MB pubs2 data_dev log_dev
Tamaño de una base de datos El tamaño es en megabytes, minimo 2MB Fácil de extender, no puede estar encogida Para hacer más chica la base de datos, se debe volverla a crear y copiar datos de nuevo con la utilidad de copiado bcp Al estimar el tamaño de una base de datos, considere principalmente: Tablas Indices Log de transacciones Deje algún espacio libre, dependiendo de la actividad anticipada Use sp_estspace para estimar el tamaño de las tablas y sus índices
Ejemplo, salida parcial: sp_estspace sp_estspace titles, 10000 name type idx_level Pages Kbytes --------------------------------------------------------------------------------- titles data 0 983 1966 titleidind clustered 0 7 14 titleidind clustered 1 1 2 titleind nonclustered 0 279 558 titleind nonclustered 1 9 18 titleind nonclustered 2 1 2 Total_Mbytes: 2.50 (followed by summary data for titleidind, titleind)
Tamaño del log El tamaño del Log depende de la actividad (tipo y cantidad de transacciones) y la frecuencia de los respaldos Un buen punto de partida: 10-25% del tamaño global de la base de datos Todos los inserts, deletes, y updates son registrados Para select into y fast bulk copy: solo la asignación y desasignación de espacio son registrados Simule correr aplicaciones con el mismo número de usuarios; entonces mida el uso del log usando dbcc checktable(syslogs) El log es fácil de extender, imposible encoger
Colocando el log en un dispositivo diferente Coloque el log en un dispositivo database diferente data_dev1 log_dev1 Deja sus respaldos del log de transacciones en separado Ayuda en el monitoreo del uso de espacio y manejo del espacio Permite el duplicado de disco del log para un recuperación a tiempo
Ejemplos: create database: Sintaxis create database database_name [on {default database_device} [= size] [,database_device [= size]]...] [log on database_device [= size,...] [, database_device [= size]]...] [with override] [for load] (1) create database pubs2 on default = 4 (2) create database mydb on default = 3, data_dev1 = 2 (3) create database salesdb on sales_dev1 = 2 log on sales_dev1 = 2 with override Nota: Es recomendado poner el log en un dispositivo diferente
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Quién crea las bases de datos? Los administradores del sistema (logines con el rol SA) pueden crear bases de datos El login que crea una base de datos es propietario de ella inicialmente
Transfiriendo la propiedad de la base de datos Para transferir la propiedad de la base de datos, accese a esa base da datos usando use dbname seguido de sp_changedbowner en otro lote Sintaxis: sp_changedbowner login_name El login debe ser válido en el servidor y no puede estar como usuario en la base de datos a transferir la propiedad Ejemplo: use productsdb go sp_changedbowner fred go Nota: La propiedad de la base de datos master no puede transferirse
Otorgando permisos para create database Los administradores del sistema pueden otorgar permisos de create database a usuarios especificos: grant create database to mary El control de uso de disco puede estar restringido en la autorización en la creación de base de datos
Efectos sobre las tablas del sistema Cuando se crea una base de datos, las siguentes tablas del sistema en master son afectadas: sysdatabases Contiene un registro por cada base de datos en el SQL Server, incluyendo el nombre de la base de datos y su propietario sysusages Contiene un registro para cada fragmento del dispositivo para cada base de datos, indicando el tamaño y la dirección del disco del comienzo lógico para ese fragmento Para desplegar esta información, consulte estas tablas o ejecute sp_helpdb
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Desplegando información de base de datos Ejemplo de salida de sp_helpdb name db_size owner dbid...status -------------------------------------------------------------------------------------- master 8.0 MB sa 1... no options set model 2.0 MB sa 3... no options set pubs2 2.0 MB sa 4... no options set salesdb 6.0 MB sa 5 select into/bulkcopy tempdb 2.5 MB sa 2 select into/bulkcopy Cuando es seguido por un nombre de base de datos, sp_helpdb reporta información sobre esa base de datos
Desplegando ubicación de la base de datos Cómo sabe SQL Server en que dispositivo esta una base de datos? sysusages (dbid,..., size, vstart),..., size, vstart) sysdevices (low, high, name, phyname, mirror) sysdatabases (name, dbid,... ) master database (continued )
Desplegando ubicación de la base de datos Ejemplo de selects from sysusages, sysdevices: select * from sysusages where dbid = db_id("smalldb") dbid segmap lstart size vstart pad unreservedpgs 5 3 0 1024 16777216 NULL 680 5 4 1024 512 33554432 NULL 496 Para desplegar el mapeo de uno de estos fragmentos de dispositivos: select low, high, name, phyname, mirrorname from sysdevices where 16777216 between low and high low high name physname mirrorname 16777216 16782335 data_dev1 /syb/data_dev1.dat NULL
Desplegando ubicación de la base de datos y uso sp_helpdb db_name despliega ubicación y uso del disco para esa base de datos Ejemplo: sp_helpdb smalldb name db size owner dbid created status smalldb 3.0 MB sa 5 May 5, 1993 no options set device fragments size usage free kbytes data_dev1 2.0 MB data only 1376 log_dev1 1.0 MB log only 1008
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Personalizando base de datos Cuando se crea una base de datos, el contenido de model es copiado a la nueva base de datos model new database Puede personalizar model a que contenga procedimientos almacenados, tablas, reglas, tipos de datos de usuario, privilegios, y opciones para todas las futuras bases de datos Solo el administrador del sistema puede actualizar model
Fijando las opciones de base de datos Usando sp_dboption, las siguientes opciones de base de datos pueden ser fijadas: abort tran on log full allow nulls by default dbo use only ddl in tran identity in nonunique index no chkpt on recovery no free space acctg read only select into/bulkcopy/pllsort single user trunc log on chkpt (continued )
Fijando las opciones de base de datos SSO pueden habilitar o deshabilitar free-space accounting; los demás serán fijados por el dueño de la base de datos (o un SA actuando como un dbo) Las opciones no podrán ser cambiadas en la base de datos master
sp_dboption Sintaxis: sp_dboption [dbname, option_name, {true false}] Ejemplo de uso: use master /* must be in master */ go sp_dboption "smalldb", "read only", true go use smalldb /* must use database and... */ go checkpoint /* checkpoint the database */ go Cualquier usuario puede usar sp_helpdb para desplegar las opciones actuales de la base de datos
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Monitoreando el uso del espacio La base de datos, tanto el segmento de log como el de datos, pueden llenarse tanto como uso se le de a la base de datos Si esto sucede, todas las modificaciones de datos son suspendidas Puede usar las siguientes herramientas para monitorear el uso del espacio en la base de datos: sp_helpdb sp_helpsegment sp_spaceused Threshold Manager
Que hacer cuando no se tiene espacio Si no se tiene espacio en el log, se tiene que truncarlo Posibles soluciones: Dump/truncate frecuentemente Si no se tiene espacio en los segmentos de datos, intente liberar espacio eliminando objetos no usados Otra alternativa: Extender la base de datos (datos y/o log) Database Expansion Logical device
Mapa del Módulo Creando y Dandoles Tamaño a las Bases de Datos Propiedad de la Base de Datos Desplegando Información de la Base de Datos Personalizando Bases de Datos Uso del Espacio Expansión de la Base de Datos
Extendiendo una base de datos Usando alter database, los propietarios de base de datos y administradores del sistema asignan espacio adicional a una base de datos sobre el mismo o diferentes dispositivos Expansion OR Expansion data_dev1 data_dev1 data_dev2 El tamaño de la base de datos no puede ser disminuido
alter database Sintaxis: alter database database_name [on {default database_device} [= size]] [log on database_device [= size]] El tamaño es especificado como incrementos de espacio adicional; predeterminado, 1MB Ejemplos: alter database pubs2 alter database pubs2 on data_dev1 = 3 alter database pubs2 on default = 2 (continued )
alter database Ejemplo de secuencia: create alter alter create database salesdb on data_dev1 = 5 alter database salesdb on data_dev2 = 2 alter database salesdb on data_dev3 = 1
Tips para la expansión de una base de datos Puede expandir una base de datos mientras este en uso Solo se puede expandir la base de datos master en el dispositivo master Si tempdb o model es expandido y el dispositivo master es renconstruido entonces se vuelve a expandir No haga a model más grande que tempdb Si model es más grande que tempdb, SQL Server no reiniciará
Separando el log y moverlo a un dispositivo diferente Para una base de datos creada sin la opción log on (esto es, sin un log separado), haga lo siguiente: Respalde el log al truncarlo Modifique la base de datos hacia un nuevo dispositivo Ejecute sp_logdevice para hacer ese dispositivo en dispositivo de log Realice estos pasos con un minimo de tiempo entre cada uno para evitar que los registros sean escritos al dispositivo original (continued )
Separando el log y moverlo a un dispositivo diferente Efecto: Las paginas antiguas serán asignadas al dispositivo anterior Los registros existentes serán desasignados tanto el log sea truncado Resultado: El log crece en el nuevo dispositivo
Expandiendo el log En el mismo dispositivo: alter database pubs2 log on log_dev1 = 1 data_dev1 Expansion log_dev1 En un nuevo dispositivo: alter database pubs2 log on log_dev2 = 4 data_dev1 log_dev1 log_dev2
Eliminando base de datos Los DBO y SAs pueden borrar una base de datos ejecutando drop database La base de datos no debe estar en uso Cuando borra una base de datos: Base de datos experimentales o antiguas, se libera el espacio Antes se trata de recuperar base de datos dañadas
Repaso Creación de Bases de Datos 1. Qué sucede cuando crea una base de datos? 2. Nombre algunas consideraciones para darle el tamaño a una base de datos. 3. Que procedimiento para ayudarle a estimar tamaños de tablas e índices? 4. Por qué es buena práctica poner el log en un dispositivo distinto? 5. Qué procedimiento despliega información acerca de las bases de datos? 6. Que hacer si el espacio del archivo de log se agota? En la base de datos?
Lab 4: Creando Bases de Datos Descripción del Ejercicio Hasta ahora... Ha creado los dispositivos de base de datos Metas Crear una base de datos Entender las tablas del sistema sysdevices, sysusages y sysdatabases (continued )
Lab 4: Creando Bases de Datos Tareas Generales Crear una base de datos de 6 MB (4 MB datos, 2 MB log) Verificar que la base de datos haya sido creada Active o desactive la opción dbo use only en la base de datos Escriba consultas que usen sysdevices, sysusages sysdatabases Lab Setup Crear sólo una base de datos a la vez