,
08/dic/2008::08:41
En Oracle cuando tenemos una BD en modo archive, genera muchos archivos con la extension .arc el cual nos va a saturar en algunas ocasiones problemas de espacio, por lo que aqui esta la solucion a ese problema:
Exportar Variables de ambiente
$rman
RMAN> connect target;
RMAN> crosscheck archivelog all;
RMAN> delete achivelog all;
confirmar que yes!
RMAN>exit;
y listo !
,
05/dic/2008::14:12
Bueno siguiendo con mi pequeño manual de autoayuda y que espero le sirva a algun dba principiante ahora les va la manera de generar una BD de manera automatica via script:
Primero debemos generar el script de la creacion de BD (este ejemplo es para 9g):
CREATE DATABASE CATPRCSC
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
LOGFILE GROUP 1 ('/catprcsc_sist000/oradata/CATPRCSC/redo01.rdo') SIZE 100M,
GROUP 2 ('/catprcsc_sist000/oradata/CATPRCSC/redo02.rdo') SIZE 100M,
GROUP 3 ('/catprcsc_sist000/oradata/CATPRCSC/redo03.rdo') SIZE 100M
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 200
MAXINSTANCES 1
CHARACTER SET WE8ISO8859P1
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/catprcsc_sist000/oradata/CATPRCSC/system01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE '/catprcsc_temp/oradata/CATPRCSC/temp01.dbf'
SIZE 500M
UNDO TABLESPACE undotbs
DATAFILE '/catprcsc_undo/oradata/CATPRCSC/undotbs01.dbf'
SIZE 400M AUTOEXTEND OFF
SYSAUX DATAFILE '/catprcsc_sist000/oradata/CATPRCSC/sysaux01.dbf' SIZE 500M autoextend off;
Este archivo debera tener extension sql, este archivo lo ejecutaremos desde SQL*PLUS
Una vez creado esto, debemos de generar un archivo de parametros el cual debemos de guardar dentro del ORACLE_HOME (no es el home de oracle)
el cual debera contener los siguientes datos y se lo pueden nombrar como initCATPRCSC.ora
el contenido de este archivo sera el siguiente:
db_name=CATPRCSC
db_files = 400 # SMALL
db_file_multiblock_read_count = 16 # MEDIUM
db_cache_size=500m
shared_pool_size = 300M # SMALL
db_block_size=8192
log_checkpoint_interval = 10000
processes = 200 # SMALL
parallel_max_servers = 5 # SMALL
log_buffer = 1048576 # SMALL
max_dump_file_size = 10240 # limit trace file size to 5 Meg each
global_names = TRUE
control_files = ('/catprcsc_sist000/oradata/CATPRCSC/control01.ora',
'/catprcsc_sist000/oradata/CATPRCSC/control02.ora',
'/catprcsc_sist000/oradata/CATPRCSC/control03.ora')
undo_management=auto
undo_tablespace=UNDOTBS
sga_max_size=850M
compatible=9.2.0.0.0
background_dump_dest=/oracle10/db10/admin/CATPRCSC/bdump
user_dump_dest=/oracle10/db10/admin/CATPRCSC/udump
core_dump_dest=/oracle10/db10/admin/CATPRCSC/cdump
una vez creados estos archivos y ya con nuestras variables de ambiente creadas, nos conectamos con SQL*PLUs como sys e iniciamos nuestra BD en modo no mount
startup nomount
y ejecutamos nuestro script con @/home/oracle/CreaCATPRCSC.sql y esperamos el prompt.
Cuanto se termina el proceso se ejecutan los siguientes scripts desde SQL*PLUS:
Run catalog and catproc
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/catdbsyn
@?/rdbms/admin/catexp
--- Como SYSTEM
cd /oracle/product/10.2/sqlplus/admin
./pupbld <<--- la ruta esta en $ORACLE_HOME/sqlplus/admin
y una vez hecho esto la BD ya esta lista!!
FELICIDADES!!
,
05/dic/2008::13:42
Bueno cuando tenemos varias BD o de plano nos conectamos a varios servidores y por alguna razon no estan nuestras variables de ambiente bien definidas en Unix(nos falta indicar ubicacion de archivos de oracle y ejectuabes entre otros etc)
Esta es la mejor opcion:
crear un archivo en vi, con extension .env
En este caso yo le pongo el nombre del SID de la BD ejm CATPRCSC.env
OJO: UNIX si es muy quisquilloso con los nombres de arhivos podemos tener el mismo nombre de archivo con solo cambiar una letra por minuscula y lo reconocera como un archivo completamente diferente por ejemplo: CATPRCSC.env, Catprcsc.env, CaTpRcSc.env etc asi que no mas fijense bien.
en el vi podemos indicar nuestras variables de ambiente del modo siguiente:
export ORACLE_BASE=/oracle10/db10 <-- la ruta de instalacion del oracle o donde estan los archivos de instalacion de oracle
export ORACLE_HOME=/oracle10/db10 <- la ruta donde esta una version en especifico de oracle
export PATH=$ORACLE_HOME/bin:$PATH <-- Donde se ecuentran los binarios de oracle
export LD_LIBRARY_PATH=/oracle10/db10/lib
export ORACLE_SID=CATPRCSC <--Definimos la BD que queremos configurar.
Una vez definidos estas variables las podemos ejecutar del siguiente modo:
$ . ./Archivo.env
y asi podremos conectarnos a nuestra BD sin problemas.
OJO!!! si tienes mas de una BD es importante que ejecutes estos archivos antes de cualquier operacion o actividad a realizar, debido a que puedes conectarte a una BD por error y provocar perdida de informacion o inconsistencia de datos
,
03/dic/2008::17:22
Si alguna vez se presenta demasiada lentitud en alguna BD, ya sea para abrir las propiedades de algun tablespace mediante el OEM. El uso de esta sentencia ayuda a mejorar el performance de la BD.
para realizar esto en SQL*PLUS conectarse como sys.
Primero se verifican cuantos objetos existen.
select * from dba_recyclebin;
y despues realizamos la depuracion o purgado del mismo:
purge dba_recyclebin;
Se debe tener paciencia por que dependiendo de la cantidad de objetos es lo que tardara en realizarse esta actividad en promedio de 30 a 60 mins.
Saludos
,
03/dic/2008::15:55
Esta sentencia sirve para ejecutarse desde SQL*PLUS:
select a.sid,a.serial#,a.process, b.pid as orapid, b.spid as os_pid from v$session a, v$process b where a.paddr = b.addr and a.osuser = 'wtuinfor' order by process
Nos regresara de sesiones que esta ejecutando dado el usuario de sistema operativo.
,
01/dic/2008::16:17
Con el siguiente script podran realizar un defragmentado de las tablas que se encuentran en una BD en especifico en SQL*Server.
--Re-indexes the specified database
CREATE PROCEDURE usp_DefragDatabase
-- We don't use sysname because it might not be long enough.
-- sysname is 128 chars, so we use double that.
dbname nvarchar(256)
AS
BEGIN
-- Quote the database name with brackets
DECLARE quoteddbname nvarchar(256)
set quoteddbname = quotename( dbname )
-- The outer EXEC is so we can do USE, not allowed in stored procs
-- The inner EXEC does the actual reindex on each table in the
-- specified database
EXEC('
USE '+ quoteddbname +'
DECLARE sTableName sysname
DECLARE PKMS_Tables CURSOR LOCAL FOR
select table_name from information_schema.tables
where table_type = ''base table'' order by 1
OPEN PKMS_Tables
FETCH NEXT FROM PKMS_Tables INTO sTableName
WHILE @ FETCH_STATUS = 0
BEGIN
select sTablename = quotename( sTablename, ''[]'')
EXEC('' DBCC DBREINDEX ( ''+ sTableName+'') WITH NO_INFOMSGS'')
FETCH NEXT FROM PKMS_Tables INTO sTableName
END
CLOSE PKMS_Tables')
END
GO
Despues de la creacion del procedimiento se procede a su ejecucion:
EXEC dbo.usp_DefragDatabase[DATABASENAME];
,
01/dic/2008::16:10
En UNIX
Para identificar a los principales consumidores de momoria, ordenado por consumo:
UNIX95= ps -e -o ruser,vsz,pid,args,time | sort -rnk2 | more
Despliega: Nombre del usuario, tamaño de momoria usada en Kb, PID, comando ejecutado, tiempo de ejecución.
,
01/dic/2008::16:05
En Oracle detectamos que cuando asignamos datafiles al tablespace de TEMP, al momento de checar espacio en Unix (bdf) o en Linux (df - k) el espacio asignado a dicho tablespace no se ve reflejado en el filesystem.
En otras palabras si tenemos un filesystem de 100M y le asignamos un datafile al tablespace de TEMP 80M,si ejecutamos bdf en unix, el sistema mostrara un espacio libre de 100M esto debido a un bug el cual no detecta el uso de este espacio a no ser que este siendo empleado por algun proceso o usuario.
Para saber cuanto espacio se esta ocupando y saber si se requiere o no asignar mas espacio a este tablespace se puede ejecutar la siguiente sentencia, la cua mostrara el usuario y el espacio en Kilobytes empleando en el Tablespace de TEMP:
col tablespace for a10
col machine for a20
col username for a10
col osuser for a15
col terminal for a10
col sid for 9999
col spid for 9999
select a.tablespace,a.contents,a.extents,a.blocks,b.username,b.osuser,
b.MACHINE, b.terminal, c.spid, b.sid, sysdate
from v$sort_usage a, v$session b, v$process c
where a.session_addr = b.saddr
and c.addr = b.paddr
order by extents desc
/
,
01/dic/2008::15:59
Bueno por ahi alguien andaba posteando el uso de Import/Export de una BD, el cual tambien abrio el espacio para recomendar el datapump de Oracle.
A continuacion existe este script que le permitira detectar el usuario de oracle que esta bloqueando asi como el objeto que esta bloqueando en la BD:
Select oracle_username, os_user_name, locked_mode, object_name, object_type
from v$locked_object a, dba_objects b
where a.object_id = b.object_id
Saludos cordiales
,
08/oct/2008::17:00
Cuando se requiere saber que carambas esta ejecutando un proceso en SQL server existen 2 opciones:
Una es a traves de Query analyzer ejecutar lo siguiente:
DBCC InputBuffer(SPID)
y obtendremos la sentencia que se ejecuta en ese momento, limitado unicamente a los primeros 255 caracteres.
Si desean obtener la sentencia completa pueden ejecutar:
DECLARE handle binary(20)
SELECT handle = sql_handle
FROM master..sysprocesses
WHERE spid = @ SPID
SELECT [text]
FROM ::fn_get_sql( handle)
Solo recuerden modificar las opciones del query analyzer para que muestre mas de 256 caracteres por columna en el resultado.
Saludos
,
07/oct/2008::16:16
Si lo que requieren es obtener la version del manejador, el nombre del servidor y que tipo de edicion tienen en su servidor, con este script:
create table #versioninfo
(
[Index] varchar(5),
[Name] varchar(20),
Internal_Value varchar(10),
Character_Value varchar(120)
)
insert into #versioninfo exec ('xp_msver')
declare sqlver varchar(10),
winver varchar(10),
cpuspeedcount varchar(3),
Memory varchar(4),
currentEditonstart varchar(3),
Editionlength varchar(3),
installdatestart varchar(10)
select Character_Value as ProductVersion, left(@ servername, 25) as 'SQL_server_name' from #versioninfo where Name in( 'ProductVersion')
-- (select Character_Value from #versioninfo where Name = 'WindowsVersion')
-- (select Internal_Value from #versioninfo where Name = 'ProcessorCount')
-- (select Internal_Value from #versioninfo where Name = 'PhysicalMemory')
create table #searchstring (location varchar(3))
insert into #searchstring values (charindex('Standard', @ version))
insert into #searchstring values (charindex('Enterprise', @ version))
insert into #searchstring values (charindex('Developer', @ version))
insert into #searchstring values (charindex('Personal', @ version))
insert into #searchstring values (charindex('desktop', @ version))
set currentEditonstart = (select * from #searchstring where location > 0)
set Editionlength = charindex('Edition', @ version) - currentEditonstart + 7
set sqlver = (select Character_Value from #versioninfo where Name = 'ProductVersion')
SELECT left(@ servername, 25) as 'SQL_server_name' , @ VERSION,
left(substring(@ version, cast( currentEditonstart as int), cast( Editionlength as int)), 20) + ')' AS 'SQL_server_Edition',
substring ( sqlver, 6, 4) + ')' as 'SQL_SP (Bld.)'
Saludos