Ir al contenido principal

Entradas

Mostrando las entradas de 2009

Activar o Desactivar modo Archive log Oracle

El modo archive log nos permite poder realizar respaldos con la BD arriba ademas de poder hacer recuperacion "point in time". El contra de esto es que vamos a necesitar espacio para poder guardarlos, el cual dependera de la carga de transacciones de nuestra BD. Primero hay que ver si nuestra BD esta en modo Archive o no. Para lo cual en sql plus ejecutamos: Archive log list. La imagen de arriba indica que nuestra BD no esta en modo archive log. Para hacerlo hay que seguir los siguientes pasos: Modificar el archivo init para agregar los siguientes parametros: log_archive_start = true (si se esta en version 9 o inferior, en 10 ya no es necesario) log_archive_dest = '[Directorio de destino de los archives]' Detener la BD. Iniciar la BD en modo mount. En el SQL Plus ejecutar: alter database archive log Abrir la base de datos con "alter database open" Y otra vez archive log list para verificar los cambios. Para probar

ORA-01555 snapshot too old

Este tipo de errores, se presenta cuando alguna transaccion trata de leer algo que ya no esta en el undo tablespace o en uno de los segmentos de rollback. Puede ser por que el tablespace de undo ya no tuvo espacio para crecer o por que el undo_rentention es insuficiente y oracle sobreescribe datos que ya no entran dentro de la ventana de retencion. La solucion es aumentar el undo_retention hasta para que sea igual al query de mayor duracion que tengamos. Espero que ayude.

Pausar una instancia de SQL Server en Cluster

Cuando necesitamos hacer algun mantenimiento en las BD, y los usuarios no dejan de conectarse, una solucion practica es pausar el servicio de SQL Server, al estar pausado las conexiones ya hechas no seran afectadas y seguiran corriendo normalmente, pero SQL Server no permitira conexiones nuevas. Para pausar SQL Server podemos hacerlo desde el SQL Server configuration manager para SQL 2005 o desde el SQL Server Service manager de SQL 2000, simplemente hay que seleccionar la instancia que necesitamos hacer click en pausa y listo. Hay que recordar que este setting es por la instancia, o sea que afectara todas las BD del server. Para una instancia de SQL 2000 en cluster esto no es posible hacerlo pues los iconos estan deshabilitados. Para poder pausar una instancia de cluster hay que ejecutar los siguiente desde la linea de comandos: net pause mssql$nombredeinstancia y para quitar la instancia de pausa ejecutar: net continue mssql$instancename Espero que sea util. Saludos.

Como saber que Service Pack tengo instalado en SQL Server?

Para saber que Service pack se tiene instalado en SQL Server, Hay que ejecutar el siguiente comando: SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') Este regresa algo parecido a: 9.00.3042.00 SP2 Enterprise Edition El primer registro es la versión, el segundo es el nivel de producto (en este caso Service pack 2), y el ultimo es la edición, En este caso Enterprise. Esta es una tabla con las versiones de SQL y su respectivo Service pack. RTM SP1 SP2 SP3 SP4 SQL Server 2017 SQL Server 2016 13.0.2149.0 13.0.4001.0 SQL Server 2014 12.0.2000.8 12.0.4100.1 12.0.5000.0 SQL Server 2012 11.0.2100.60 11.0.3000.00 11.0.5058.0 11.0.6020.0 11.0.7001.0 SQL Server 2008 R2 10.50.1600.1 10.50.2500.0 10.50.4000.0 10.50.6000.34 SQL Server 2008 10.00.1600.22   10.00.2531.00 10.00.4000.00 10.00.5500.00 10.0.6000.29 SQL Server 2005 9.00.1399 9.00.2047 9.00.3042 9.00.4035 9.00.5000 SQL Serve

Obtener la fecha del ultimo respaldo de las BD en el server

Si necesitamos obtener la ultima fecha de respaldo completo de una BD, podemos utilizar el siguiente script. declare @dbname varchar(256) declare @status varchar(128) declare dbs_cursor cursor for select name ,status = case when status > 31 then 'BD en read only o en Offline' else 'Normal' end from master..sysdatabases open dbs_cursor fetch next from dbs_cursor into @dbname,@status while @@fetch_status = 0 begin SELECT @dbname,@status, ISNULL(Convert(char(10), MAX(backup_finish_date), 101), 'Never') Last_Backup FROM master.dbo.sysdatabases B LEFT OUTER JOIN msdb.dbo.backupset A ON A.database_name = B.name AND A.type = 'D' WHERE B.name = @dbname fetch next from dbs_cursor into @dbname,@status END close dbs_cursor deallocate dbs_cursor Espero que les sea util. Saludos.

Eliminar archive logs antiguos.

Para eliminar viejos archive logs de las BD de oracle en windows, que ya fueron enviados a cinta, podemos utilizar el siguiente script de VBS. Para generar el arhivo vbs simplemente pegar en un notepad el codigo, modificarlo de acuerdo a nuestros requerimientos y guardar con extension vbs. El codigo es: Set objFSO = CreateObject("Scripting.FileSystemObject") objStartFolder = "[ruta a borrar]" set objfolder = objFSO.GetFolder(objStartFolder) Set colFiles = objFolder.Files For Each objFile in colFiles if objFile.DateCreated < (date - [dias que se desea conservar]) then fullpath = objFile.Path objFSO.DeleteFile(fullpath) end if Next para ejecutarlo en la linea de comandos seria cscript [nombre del script] Saludos.

Migrar los logins / usuarios de SQL Server entre servidores

Cuando necesitamos mover una BD de un servidor a otro, pero queremos que los usuarios tengan los mismos privilegios que en el servidor actual, tenemos que llevar al nuevo servidor tambien los logins. En SQL server es diferente un login a un usuario. Un login es a nivel del Servidor y usario es a nivel de la BD. Si creamos por ejemplo el usuario fer en el servidor A, y luego creo un usuario fer en el servidor B y me llevo la BD produccion al server B el usuario fer es diferente, esto debido a que sql en realidad trabaja con SIDs en lugar del nombre del usuario. Para solucionar esto hay que llevarnos los logins al nuevo server. Como la BD se respalda con los usuarios incluidos, solo hay que recrear los usuarios con su mismo SID en el nuevo server. El script es como sigue: SET NOCOUNT ON SELECT 'EXEC sp_addlogin @loginame = ''' + loginname + '''' ,', @defdb = ''' + dbname + '''' ,', @deflanguage = ''' + langu

Como mover un datafile de oracle

Para mover un datafile fisicamente, en este caso es con la base de datos montada. La sintaxis es : alter database rename file '{ruta actual }' to '{ruta nueva}'; Un ejemplo seria: startup mount; alter database rename file '/data/orcl/datafiles/UNTOTBS_b.dbf' to '/u03/data/orcl/UNTOTBS_b.dbf';

Como saber que version de MDAC tengo instalada?

Para saber que version de MDAC esta instalada en el servidor o en una PC, hay que crear un archivo con extension vbs con el siguiente codigo: wscript.echo GetAdoVersion Function GetAdoVersion() 'Returns an empty string is ADO is not installed ' Dim o As Object On Error Resume Next Set o = CreateObject("ADODB.Connection") If Err.Number = 0 then GetAdoVersion = o.Version Else 'ADO is not installed End If End Function una vez que tengamos el archivo creado hay que ejecutarlo desde la linea de comandos con el comando cscript, como en el ejemplo de abajo. cscript mdacver.vbs En este caso el archivo vbs se llama mdacver.vbs, una vez ejecutado regresara la version del MDAC instalada. Lo he probado en windows 2000, xp y 2003 y ha funcionado bien. Saludos.

Inicio Automatico de la instancia en HPUX

1.- Hay que loguearse al server con el usuario root. 2.- Editar el archivo oratab que esta en /etc/orartab y configurar las instancias que queremos que inicien automaticamente, en el archivo generalmente ya vienen las instancias si se crearon con el DBCA, en caso de que no el formato es el siguiente: SID:ORACLE_HOME:{Y|N|W} Ejemplo: test:/u01/oracle9i/home:Y Lo cual iniciara la instancia test que tiene como home la ruta /u01/oracle9i/home (la ruta es ejemplo solamente, lo recomendable es seguir las reglas del OFA) y la "Y" al final indica que la inicie al iniciar el server, en caso de mantenimientos o cosas por el estilo que no deseemos que inicie hay que cambiar la "Y" por "N". 3.- Crear un archivo que se llame dbora (El codigo viene abajo) en /sbin/init.d Hay que tener cuidado de cambiar las rutas para que refleje el oracle home real y el usuario owner de la instalacion de oracle (en este caso oracle) 4.- Cambiar los privilegios del archivo dbora como s

ORA-12560: TNS: protocol adapter error

Primero se tiene que revisar que la variable ORACLE_SID este correctamente asignada. Si esta correcta, este error comunmente pasa cuando estando conectado a un server con queremos accesar al SQL PLUS o al SVRMGR localmente utilizando el remote desktop de windows 2000 o 2003. Para evitarlo necesitamos conectarnos DIRECTAMENTE a la consola del servidor. Con windows 2003 hay que ejecutar desde linea de comando "mstsc /console" y conectarnos como normalmente. En windows 2000 necesitamos alguna herramienta como "PC Anywhere" o "Dameware" para conectar directamente a la consola. Espero que esto ayude. Saludos.

Respaldar todas las Bases de Datos de SQL Server

Hay veces que alguna aplicacion esta creando y eliminando bases de datos continuamente o en ocasiones hay muchas Bases de datos que hace complicado el andar creando jobs o planes de mantenimiento para cada una. Para esos casos desarrolle un script que permitira respaldar todas las BD de datos (excepto las de systema, northwind, pubs), el script solo realiza respaldos completos. El script funciona tanto para SQL 2000 como para 2005. Espero que les sirva. Saludos. FR. /*******FernandoRivas*****************/ /*******http://dbamex.blogspot.com*****/ declare @bases varchar(600) declare @file varchar(4000) /* declaracion del cursor que contendra los datos*/ declare nbase cursorforselect name from master..sysdatabases where name not in ('master', 'model', 'msdb', 'pubs', 'northwind', 'tempdb') /* abrir el cursor*/ open nbase /*obtener la primer fila del cursor y agregarle el valor a la variable*/ fetch next from nbase into @bases /*condicion loo

ORA-12571: TNS:packet writer failure

Ocasinalmente algunos clientes marcan el siguiente error: ORA-12571: TNS:packet writer failure Para solucionarlo hay que comentar esta linea o modificar el archivo sqlnet.ora de la siguiente manera SQLNET.AUTHENTICATION_SERVICES= (NTS) cambiar a SQLNET.AUTHENTICATION_SERVICES= ( NONE ) El resultado es el mismo si se comenta en el archivo con el simbolo # al principio. Saludos.

Memoria utilizada por Oracle

Ocasionalmente al estar trabajando con oracle, algunos clientes pueden recibir errores de que hace falta memoria, mas sin embargo en el task manager vemos que oracle no esta usando toda la memoria que esta asignada para el proceso. Esto es por el diseño de los servidores de windows a 32 bits, que solo pueden asignar a una aplicacion alrededor de 2 GB (no recuerdo el numero exacto) y como en windows los procesos de usuarios son en realidad Threads del proceso de oracle, toda la memoria es agrupada bajo el proceso de oracle. Para ver la memoria realmente usada por oracle podemos utilizar el siguiente query. select sum(bytes)/1024/1024 Mb from (select bytes from v$sgastat union select value bytes from v$sesstat s, v$statname n where n.STATISTIC# = s.STATISTIC# and n.name = 'session pga memory' ); Este query nos regresa la memoria usada por oracle junto con todos sus procesos de usuario ( y su respectiv

ORA-12537 Usando un listener de 9i para conectar a una BD 10g

Cuando se tienen 2 instalaciones de oracle con versiones diferentes, hay que utilizar siempre el listener de la version mas nueva. Segun metalink Oracle 8i funcionara con listeners de 8 y de 9 la version 9 con listeners versiones 9 y 10 y la 10 con listeners de 10 y 11. En este caso el error ORA-12537 se presenta cuando se utiliza por ejemplo para una BD de 10g un listener de 9i. En este caso lo que hay que hacer es copiar el listener.ora al directorio network/admin del home de la instalacion de 10 bajar el listener de 9 e iniciar el de 10. Con esto todas las BD de oracle 9 se conectaran usando el listener de la Version 10g. Saludos.

Mover Bases de Datos Replicadas, sin deshacer replicacion. Mover Distribution database

Hay veces por el crecimiento de una BD que puede ser necesario mover un datafile, de una Base de datos que esta siendo replicada a otro disco. El procedimiento normal seria hacer un detach de la BD y mover los datafiles al nuevo drive, sin embargo esto no es posible cuando una BD esta replicada. Para estos casos se tendria que deshacer la replica, hacer detach de la BD, mover los datafiles hacer attach de las BD y volver a crear la replica. En SQL 7 y SQL 2000 hay un camino mas facil. Cabe mencionar que como involucra actualizar manualmente las tablas de sistema esto NO esta soportado por Microsoft. Aunque yo lo he hecho muchas veces y nunca he tenido problemas. Primero hay que activar el setting "Allow Modifications to be made directly to the system catalogs" que esta en Server Settings en las opciones del Servidor en el enterprise manager. Recuerden sacar un respaldo de Master por cualquier problema que podamos llegar a tener. Una vez hecho esto matamos o desconectamos toda

Error al instalar Oracle 10g en Linux

Al estar Instalando Oracle 10g (en mi caso fue con la versión 5 de enterprise linux " unbreakable ") aparece el siguiente error: Checking operating system version : must be redhat -2.1, UnitedLinux -1.0, redhat -3 or SuSE -9 Failed Para solucionarlo simplemente hay que editar el archivo oraparam . ini que se seencuentra en Disk 1/ Install / oraparam . ini En la seccion de [ Certified Versions ] hay que agregar " redhat -5" (sin comillas) y volver a iniciar la instalación . Saludos.

Monitoreo de espacio libre en discos desde SQL Server

Update: Una nueva opcion, con powershell esta disponible en el siguiente link, recomiendo mas utilizar la nueva y personalizarla de acuerdo a los requerimientos personales. http://dbamex.blogspot.mx/2017/10/revision-de-espacio-en-servidores.html Post original: Uno de los principales indicadores que se tiene que tomar en cuenta como DBA es el espacio disponible en disco. No es problema cuando se tiene un server o 2 para monitorear, sin embargo cuando hay una cantidad considerable automatizar un proceso que lo haga es lo mejor. Dentro de SQL Server (7,2000,2005) hay un procedimiento no documentado que nos puede ayudar a cumplir este cometido. El procedimiento es XP_FIXEDDRIVES, no lleva parámetros ni nada y nos regresa todos los discos a los que tiene acceso SQL Server y su espacio disponible en Megabytes. Si esta en cluster mostrara todos los discos aunque los discos no esten en el mismo grupo que la instancia, lo que puede llegar a confundir. Dejo a consideración de cada quien co

VMware para servidores de pruebas (Cluster MSSQL, RAC ORACLE)

Tener un ambiente de pruebas o de desarrollo algunas veces es difícil de tener y mas aun en la época actual. Puede ser mas difícil el tratar de probar tecnologías de Alta Disponibilidad como RAC en el caso de Oracle o los Clusters de SQL Server. Una Herramienta que he encontrado invaluable para estos casos es VMWare. Este software permite "emular" una maquina corriendo dentro de otra como cualquier aplicacion. Se tienen además varias opciones de conflagración para agregar mas hardware como tarjetas, discos, cpu's memoria etc. Aunque todo esto esta limitado por el hardaware físico que se tenga. En el caso de su servidor tengo varios "servidores" corriendo RAC, Clusters, en ambientes tanto Windows como Linux, todo esto en mi laptop dual core con 2GB de RAM, que cabe dentro de la categoria de una laptop "normal". VMware Server esta disponible para bajar desde su pagina oficial, lo mejor de todo es que es gratis!! Claro no es para producción pero para nues

Envio de mail desde oracle. (9i,10g)

Que tal, Esta noche les paso un script que nos permitira enviar mails desde oracle, este script funciona en la version 9i y en la 10g (por tiempo solo la pude probar en 9i, pero segun san Oracle tambien funciona en 10g, si alguien lo puede corroborar antes que yo se le agradece.) Este script esta publicado en la pagina de Metalink de Oracle, pero como se que no todo mundo tiene acceso ahí, pues aqui lo comparto con ustedes. Cabe mencionar que no cualquiera puede llegar a mandar mails desde oracle, el requisito es que tengan un servidor desde el cual puedan hacer SMTP Relay, si no lo saben contacten a su administrador de Exchange que les diga que server pueden usar para esto. Si van a mandar attachments necesitan crear un directorio para oracle, para que pueda leer el archivo, por ejemplo create directory 'mi_directorio' as 'c:\logs' El script para el procedimiento para el envio de mails es el siguiente: CREATE OR REPLACE PROCEDURE "SYS"."MAIL_FILES"

Reduccion de Costos. (SQL Developer)

En estos tiempos de "Crisis" (No me gusta usar esa palabra, pero es la que esta de "moda") , me di a la tarea de buscar algún software que estuviera disponible y que fuera gratis o ya por lo menos barato. Al igual que muchos de los DBAs de Oracle soy un usuario de las herramientas de Quest , en especial del famoso "sapo" (TOAD). Quien tenga tiempo trabajando en este ambiente de oracle , sabrá que la interfaz del SQLplus es bastante arcaica y no es nada amigable para trabajar, y mas aun, si eres alguien que viene del mundo del SQL Server, (es raro pero si hay gente asi) . El uso de TOAD para tus consultas era indispensable ademas de todas la monerias que tiene ( graficacion de espacio, trace de sesiones con un solo click, etc) . En fin, el chiste de todo esto fue que, como ya no nos podian aprobar el comprar mas licencias de TOAD para su servidor y para la gente que utiliza oracle (todos los usuarios de oracle querian licencias de toad pues el sql