06 agosto 2008

Configuracion de Linux para iniciar y apagar automaticamente una base de datos

1.- Modificar el archivo /etc/oratab
2.- Crear el archivo de comandos de inicio y cierre de base de datos
/etc/rc.d/init.d/dbora
3.- Crear enlaces simbolicos para inicio y el cierre de la BD.


Para comenzar, establezca una sesion de Linux como usuario root. A continuacion abra el archivo
/etc/oratab. Modifique la linea de modo que el indicador N este configurado como Y:

oralin:/usr/oracle:Y

A continuacion, debe crear una secuencia de comandos de shell denominado
/etc/rc.d/init.d/dbora
que se puede ejecutar por el programa init de la computadora.

Copiar la secuenacia de comandos DBORA en el directorio
/etc/rc.d/init.d/ y despues defina la propiedad y los permisos con los siguientes comandos:
chown root.root /etc/rc.d/init.d/dbora
chmod 750 /etc/rc.d/init.d/dbora

En este momento es posible probarlo:


/etc/rc.d/init.d/dbora status
/etc/rc.d/init.d/dbora start
/etc/rc.d/init.d/dbora stop

Establecer con el usuario ORACLE revisar el script DBSTART
chown oracle.dba $ORACLE_HOME/bin/dbstart
chmod 755 $ORACLE_HOME/bin/dbstart

Despues de confirmar que la secuencia de comandos DBORA funciona correctamente, necesita
configurar el programa INIT del servidor.

ln -s /etc/rc.d/init.d/dbora /etc/rc.d/rc0.d/K05dbora
ln -s /etc/rc.d/init.d/dbora /etc/rc.d/rc2.d/S95dbora
ln -s /etc/rc.d/init.d/dbora /etc/rc.d/rc3.d/S95dbora
ln -s /etc/rc.d/init.d/dbora /etc/rc.d/rc5.d/S95dbora
ln -s /etc/rc.d/init.d/dbora /etc/rc.d/rc5.d/K05dbora


Despues de configurar los vinculos para el proceso INIT, puede comprobar el trabajo realizado apagando y reiniciando el sistema.

Reorganizar Base de Datos con PRETORIA

Cuando estamos reorganizando la Base de Datos, a veces es necesario ajustar los parametros de almacenamiento de las tablas.
Es una tarea ardua si consideramos que una Base de Datos mediana tiene miles de tablas.

Existe una utileria que nos ayuda a modificar los parametros de almacenamiento de las tablas tales como:

PCTUSED
PCTFREE
INITIAL
NEXT
MINEXTENTS
MAXEXTENTS
PCTINCREASE
FREELISTS
FREELIST GROUPS
INITRANS
MAXTRANS
TABLESPACE
DEGREE

Es importante leer todo el manual que acompana a la utileria, ya que es muy extensa.

Voy a describir brevemente a PRETORIA.

Que es Pretoria?
Pretoria es una herramienta para manipular los Oracle Indexfiles.
Parsea el archivo indexfile, hace una busqueda y reemplaza los parametros de storage.

Como trabaja Pretoria?
Pretoria necesita 2 archivos de entrada:

Oracle Indexfile: un archivo indexfile contiene todas las sentencias de creacion de tablas e indices. Sin embargo estas sentencias estan todas comentadas.

Archivo que contiene los nuevos parametros de storage: este archivo es creado facilmente con algun PL/SQL o paquete UTL_FILE


Como es un archivo Indexfile?
Ejemplo:
REM CREATE TABLE "PORTAL30"."WWV_SYS_APPLICATION_TEMPLATES$" ("ID"
REM NUMBER(*,0), "TEMPLATE_SCHEMA" VARCHAR2(30) NOT NULL ENABLE,
REM "TEMPLATE_NAME" VARCHAR2(50) NOT NULL ENABLE, "TEMPLATE_TYPE"
REM VARCHAR2(50) NOT NULL ENABLE, "CREATED_BY" VARCHAR2(30), "CREATED_ON"
REM DATE, "UPDATED_BY" VARCHAR2(30), "UPDATED_ON" DATE) PCTFREE 10
REM PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING STORAGE(INITIAL 16384 NEXT
REM 24576 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50 FREELISTS 1 FREELIST
REM GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "PORTAL" ;
CREATE UNIQUE INDEX "PORTAL30"."WWV_SYS_APP_TEMPLS$_PK" ON
"WWV_SYS_APPLICATION_TEMPLATES$" ("ID" ) PCTFREE 10 INITRANS 2 MAXTRANS
255 STORAGE(INITIAL 40960 NEXT 40960 MINEXTENTS 1 MAXEXTENTS 505
PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "PORTAL" LOGGING ;
REM ALTER TABLE "PORTAL30"."WWV_SYS_APPLICATION_TEMPLATES$" ADD
REM CONSTRAINT "WWV_SYS_APP_TEMPLS$_PK" PRIMARY KEY ("ID") USING INDEX
REM PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 40960 NEXT 40960
REM MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50 FREELISTS 1 FREELIST
REM GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "PORTAL" ENABLE ;
REM ALTER TABLE "PORTAL30"."WWV_SYS_APPLICATION_TEMPLATES$" ADD
REM CONSTRAINT "WWV_SYS_APP_TEMPLS$_CK1" CHECK (template_type in
REM ('STRUCTURED', 'UNSTRUCTURED')) ENABLE NOVALIDATE ;
REM CREATE TABLE "PORTAL30"."WWV_SYS_APP_TEMPLATE_DETAILS$"
REM ("APP_TEMPLATE_ID" NUMBER(*,0), "ELEMENT" VARCHAR2(50), "THE_VALUE"
REM LONG) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
REM STORAGE(INITIAL 65536 NEXT 40960 MINEXTENTS 1 MAXEXTENTS 505
REM PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT


Como se crea un indexfile?
El archivo indexfile se crea con las utilerias export/import.

Crear un archivo dump usando EXP

exp system/manager@TEST FULL=Y ROWS=N File=expdat.dmp

No es necesario exportar los datos, solo la estructura logica.

Usar IMP para crear el archivo INDEXFILE a partir del archivo dump

imp system/manager FILE=expdat.dmp FULL=Y INDEXFILE=index.sql

No hay problema, nada se importara a la Base de Datos. Solo crea el indexfile.


Como crear el archivo de almacenamiento?

Existen varias maneras de crearlo.
Desde codigo PRO*C, PRO*COBOL, JDBC (Java), hasta PL/SQL.

Sintaxis:
Listado de los parametros de storage :
"OWNER"."SEGMENTNAME"."PARTITIONNAME" storage parameter 1 value 1 storage parameter n value n

Por ejemplo:
DWH"."CUSTOMERS" INITIAL 100M NEXT 100M PCTFREE 5 TABLESPACE CUST
DEFAULT_TABLE("DWH") INITIAL 1M NEXT 1M TABLESPACE DWH_DATA
DEFAULT_TABLE ("DWHADMIN") INITIAL 512K NEXT 512K TABLESPACE DWH_ADMIN_DATA


La explicacion a detalle puede ser leida en el manual de pretoria.

Ejecutar Pretoria
Mi ejemplo:

java Pretoria -i tabs_FULANO.txt -ot salidatab.txt -oi salidaidx.txt -oc salidaconstr.txt -s nextextents01.txt

Contenido de los archivos

tabs_FULANO.txt
REM CREATE TABLE "FULANO"."ADDRESS_TYPE" ("DR_TYPE_CD" VARCHAR2(2)
REM NOT NULL ENABLE, "DR_TYPE_DESC" VARCHAR2(30), "UPDATE_FLAG"
REM NUMBER(1, 0), "LA_LOD_DT" DATE) PCTFREE 10 PCTUSED 40 INITRANS 1
REM MAXTRANS 255 STORAGE(INITIAL 204800 NEXT 204800 MINEXTENTS 1
REM MAXEXTENTS 700 PCTINCREASE 1 FREELISTS 1 FREELIST GROUPS 1
REM BUFFER_POOL DEFAULT) TABLESPACE "DOJETKTBL02" LOGGING NOCOMPRESS ;
CONNECT FULANO;
CREATE UNIQUE INDEX "FULANO"."XDRSS_YPE" ON "ADDRESS_TYPE"
("ADR_TPE_MD" ) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL
1064960 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 500 PCTINCREASE 1 FREELISTS 1
FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "DOJETKTBLIDX02" NOLOGGING ;
REM ALTER TABLE "FULANO"."ADESS_TPE" ADD PRIMARY KEY
REM ("ADDR_TYPE_CD") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
REM STORAGE(INITIAL 1064960 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 500
REM PCTINCREASE 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
REM TABLESPACE "QAZAQS" NOLOGGING ENABLE ;
REM CREATE TABLE "FULANO"."NTRS_BY_LH" ("PERIOD" VARCHAR2(6),
REM "LUNTHND_COSE_DT" DATE, "REL_ENTR" NUMBER(8, 0), "IZQUI_ENTR"
REM NUMBER(8, 0), "GUAU_ENTR" NUMBER(8, 0), "TAIL_ENTR_OJETK" NUMBER(8,
REM 0), "RETAIL_ENTR_WH" NUMBER(8, 0), "RETAIL_ENTR_AG" NUMBER(8, 0),
REM "IZQUI_NTR_OJETK" NUMBER(8, 0), "IZQUI_ENR_WH" NUMBER(8, 0),
REM "IZQUI_NTR_AGUA" NUMBER(8, 0), "GUAU_SELENA_OJETK" NUMBER(8, 0),
REM "GUAU_SELENA_WH" NUMBER(8, 0), "GUAU_SELENA_AG" NUMBER(8, 0)) PCTFREE
REM 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 163840 NEXT
REM 131072 MINEXTENTS 1 MAXEXTENTS 500 PCTINCREASE 1 FREELISTS 1 FREELIST
REM GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "QWER" LOGGING
REM NOCOMPRESS ;
.
.
.

salidatab.txt


REM *************************************************************************************************
REM * This file was created using Pretoria 3b on Windows XP 5.1 x86
REM * Use 'set SQLBLANK on' in SQLPLUS 8.1.5 or higher to run execute this file - older versions use svrmgrl!
REM * Pls send bugs, recommendations, ... to kurt_van_meerbeeck@axi.be or kurtvm@pandora.be !
REM * Pretoria is FREE ! It may not be sold as a commercial product nor may it be part of
REM * a commercial project !!!
REM * Check out my homepage http://zap.to/knal
REM * Fri Feb 15 11:32:08 CST 2008
REM *************************************************************************************************
CONNECT FULANO;

CREATE UNIQUE INDEX "FULANO"."RESS_YPE"
ON "FULANO"."RESS_TPE"
( "DR_TPE_D" )
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE
( INITIAL 1064960
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 500
PCTINCREASE 1
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT ) TABLESPACE "ASDFAD" NOLOGGING ;

ALTER TABLE "FULANO"."ADDRESS_TYPE"
ADD PRIMARY KEY ( "A_YSDE_CD" ) USING INDEX
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE
( INITIAL 1064960
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 500
PCTINCREASE 1
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT ) TABLESPACE "ASDFDSVRE" NOLOGGING ENABLE ;






Pasitos para reorganizar la Base de Datos:

In short - following these steps :
1.Export your DB
2.Create an indexfile
3.Make your storage rules - remember - there is no sky !
4.Run Pretoria
5.Use the table output script to pre create your tables
6.Import your data (INDEX=N & CONSTRAINTS=N ... referential key constraints :-) )
7.Run the index output script
8.Import your data (ROWS=N INDEX=N CONSTRAINTS=Y)


Descargar Pretoria.

Oracle export and import by pipe

EXPORT pipe

#!/bin/ksh
rm -f export_pipe
mknod export_pipe p
chmod 666 export_pipe
nohup gzip -c < export_pipe > expdat.dmp.gz &
imp "\"/ as sysdba\"" file=export_pipe full=yes ignore=yes
log=exportTESTDB.log
rm -f export_pipe


IMPORT pipe
To import, I use gunzip and do the opposite!

mknod exp.pipe p
gunzip < expdat.dmp.gz > exp.pipe &
imp userid=system/manager file=exp.pipe full=y

shutdown listener with password

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# funct_shutdown_lsnr(): Shutdown Listener
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
funct_shutdown_lsnr(){
ENCRYPTED_PASSWORD=`grep -i PASSWORDS_LISTENER_${ORA_SID} ${ORACLE_HOME}/network/admin/listener.ora | awk -F='{print $2}' -`


${ORACLE_HOME}/bin/lsnrctl << face="courier new">set current_listener LISTENER_${ORA_SID}
set password $ENCRYPTED_PASSWORD
stop
EOF
}

X-Window remoto a través de ssh (cuando hay proxy)


Editar desde UBUNTU

fortino@fortino-laptop:/etc/ssh$ sudo vi ssh_config

Descomentar la siguiente linea y colocarlo en "yes" asi;

ForwardX11 yes

Guardar y salir.

Conectarse a través de ssh al servidor
Por ejemplo:

fortino@fortino-laptop:/etc/ssh$ ssh ora10g@172.18.156.129

Ir al directorio donde se encuentra runInstaller y ejecutarlo

/ora10g/ora10gsoft

$ ./runInstaller

Y se verá la ejecucion del instalador de Oracle.

Starting Oracle Universal Installer...

Checking installer requirements...

Checking operating system version: must be 5.8, 5.9 or 5.10. Actual 5.10
Passed

Checking Temp space: must be greater than 250 MB. Actual 85159 MB Passed
Checking swap space: must be greater than 500 MB. Actual 92399 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed

All installer requirements met.

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2006-07-05_05-04-40PM.

05 agosto 2008

FTP seguro no iteractivo (modo batch) (sftp no interactive)

Para realizar la transferencia de archivos a traves de SFTP, es necesario el uso de la contrasena
para tranferir el archivo.
De esta manero no se puede realizar un ftp seguro en modo batch.

Por lo que se realiza de esta manera:
En nuestro server hacer:

ssh-keygen -b 1024 -P "" -t rsa1
ssh-keygen -b 1024 -P "" -t dsa
ssh-keygen -b 1024 -P "" -t rsa



Me funciono de esta manera:

ssh-keygen -t rsa1
ssh-keygen -t rsa
ssh-keygen -t dsa



Cuando pregunte para definir la "passphrase" la "frase de paso", es el mismo para cada una.
La "frase de paso" puede ser cualquiera puede incluir espacios y signos de puntuacion.

Nos cambiamos al directorio .ssh

cd ~/.ssh

Copiamos el contenido de los 2 archivos generados a un solo archivo llamado en este ejemplo "mykeys"

cat identity.pub id_rsa.pub id_dsa.pub > mykeys


Copiamos el archivo al servidor destino
scp mykeys machine:


En el servidor destino hacemos:

mkdir ~/.ssh <Hacer si no existe ~/.ssh >
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
cat ~/mykeys >> ~/.ssh/authorized_keys
rm ~/mykeys


Desde nuestro servidor:
create sube.sh file
sftp oracle@10.1.20.127<< EOF
put prueba.sh
EOF
exit


Resultado:
$ ./sube.sh
Connecting to 10.1.20.127...
sftp> Uploading prueba.sh to /export/home/oracle/prueba.sh
sftp>
$