Creación manual de una base de datos Oracle 11g sobre OEL

diciembre 8, 2013 2 comentarios

Se asume que ya esta instalado el motor de la base y se tienen ya seteadas
las variables ORACLE_HOME y ORACLE_BASE. Todo lo anterior probado sobre Oracle Enterprise Linux 6.4

Paso 1 Crear la estructura de los directorios
Para este ejemplo la instalación de la base sera sobre la ruta /01/newdb/

Donde newdb sera el nombre de nuestra base de datos.

$ cd /u01
$ mkdir newdb
$ cd newdb
$ mkdir adump
$ mkdir diag
$ mkdir flash_recovery_area
$ mkdir data
$ cd ..
$ chmod -R 777 /u01/newdb/*
$ chown -R oracle:oinstall /u01/newdb/*

Paso2
Creación del parameter file initNEWDB.ora
El archivo debe ser creado en $ORACLE_HOME/dbs

$ cd $ORACLE_HOME/dbs
$ vi initNEWDB.ora
db_name='NEWDB'
memory_target=1G
processes=150
audit_file_dest='/u01/newdb/adump'
audit_trail='db'
db_block_size=8192
db_domain=''
diagnostic_dest='/u01/newdb/diag'
db_recovery_file_dest='/u01/newdb/flash_recovery_area'
db_recovery_file_dest_size=2G
dispatchers='(PROTOCOL=TCP)(SERVICE=NEWDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files=(/u01/newdb/data/control01.ctl,/u01/newdb/data/control02.ctl,/u01/newdb/data/control03.ctl)
compatible='11.2.0'

Paso3 Script de creación de la base de datos

$ cd /u01/newdb
$ vi create_newdb.sql
CREATE DATABASE NEWDB
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 1
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
LOGFILE
GROUP 1 '/u01/newdb/data/redo01.rdo' size 100M,
GROUP 2 '/u01/newdb/data/redo02.rdo' size 100M,
GROUP 3 '/u01/newdb/data/redo03.rdo' size 100M
DATAFILE '/u01/newdb/data/system.dbf' size 1000M extent management local
SYSAUX DATAFILE '/u01/newdb/data/sysaux.dbf' size 1000M
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
'/u01/newdb/data/temp01.dbf' sizeo 1000M extent management local uniform size 1M
UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u01/newdb/data/undotbs1.dbf' size 1000M;

Paso 4 Setear ORACLE_SID

$ export ORACLE_SID=NEWDB

Paso 5 Creación del archivo de contraseñas

$ orapwd file=$ORACLE_HOME/dbs/orapwdNEWDB password=12345 entries=10

Paso 6 Creación de la base

$ sqlplus "/ as sysdba"
 Connected to an idle instance
sql> create spfile from pfile='$ORACLE_HOME/dbs/initNEWDB.ora';
sql> startup nomount
sql> select status from v$instance;
 status
 started
sql> @/u01/newdb/create_newdb.sql
 Database created

Paso 7 Ejecucion de scripts finales

sql> @?/rdbms/admin/catalog.sql
sql> @?/rdbms/admin/catproc.sql
sql> @?/rdbms/admin/catblock.sql
sql> @?/rdbms/admin/catoctk.sql
sql> @?/rdbms/admin/owminst.plb
sql> @?/javavm/install/initjvm.sql
sql> @?/xdk/admin/initxml.sql
sql> @?/xdk/admin/xmlja.sql
sql> @?/rdbms/admin/catexf.sql
sql> @?/rdbms/admin/catdust.sql

Ahora nos conectamos como SYSTEM y ejecutamos:

sql> conn system/manager

sql> @?/sqlplus/admin/pupbld.sql
sql> @?/sqlplus/admin/hlpbld.sql helpus.sql

Paso 8 Verificamos las vistas creadas

sql> conn "/ as sysdba"
sql> select name from v$database;

Paso 9 (adicional) Cambiar a modo archivelog

sql> archive log list
sql> shutdown immediate
sql> startup mount
sql> alter database archivelog;
sql> alter database open;
sql> archive log list
sql> select status from v$instance;
 status
 open
Categorías: Oracle

Oracle 11g Configura y prueba envio de correo desde Store procedure

marzo 21, 2012 Deja un comentario

Primero se define ACL para el usuario que tendra el codigo de envio de correos, luego creamos el store procedure y por ultimo probamos el codigo. Cabe aclarar que el codigo solo te permite enviar a un solo destinatario.

Definiendo la regla ACL: Access Control List
utl_mail.xml .- Es el nombre del archivo donde quedara asignada
USRCORREO.- Es el usuario que tendra permiso para usar el correo.
servidordecorreo.com.mx.- Tu Servidor de correo
9025.- Rango de puertos de tu correo

begin
dbms_network_acl_admin.create_acl (
acl         => ‘utl_mail.xml’,
description => ‘Allow mail to be send’,
principal   => ‘USRCORREO’,
is_grant    => TRUE,
privilege   => ‘connect’
);
dbms_network_acl_admin.add_privilege (
acl       => ‘utl_mail.xml’,
principal => ‘USRCORREO’,
is_grant  => TRUE,
privilege => ‘resolve’
);
dbms_network_acl_admin.assign_acl(
acl  => ‘utl_mail.xml’,
host => ‘servidordecorreo.com.mx’,
lower_port => 9025,
upper_port => 9025
);
commit;
end;

Creando el Store Procedure para el usuario usrcorreo:

create or replace PROCEDURE ENVIA_CORREO (
p_De IN VARCHAR2,
p_Para IN VARCHAR2,
p_Encabezado IN VARCHAR2,
p_Mensaje IN VARCHAR2
)
AS
l_mailhost VARCHAR2 (255) := ‘servidordecorreo.com.mx’;
l_mail_conn UTL_SMTP.connection;
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
UTL_SMTP.WRITE_DATA(l_mail_conn, name || ‘: ‘ || header || UTL_TCP.CRLF);
END;

BEGIN
l_mail_conn := UTL_SMTP.OPEN_CONNECTION(‘servidordecorreo.com.mx’, 9025);
UTL_SMTP.HELO(l_mail_conn, ‘servidordecorreo.com.mx’);
utl_smtp.command( l_mail_conn, ‘AUTH LOGIN’);
utl_smtp.command( l_mail_conn, utl_raw.cast_to_varchar2( utl_encode.base64_encode( utl_raw.cast_to_raw( ‘Usuario_que_se_autentifica’ ))) );
utl_smtp.command( l_mail_conn, utl_raw.cast_to_varchar2( utl_encode.base64_encode( utl_raw.cast_to_raw( ‘Password_de_cta_autentificada’ ))) );

UTL_SMTP.MAIL(l_mail_conn, ‘Correo_de_cta_autentificada@correo.com.mx’);
UTL_SMTP.RCPT(l_mail_conn, p_Para);
UTL_SMTP.OPEN_DATA(l_mail_conn);
send_header(‘From’,    p_De);
send_header(‘To’,      p_Para);
send_header(‘Subject’, p_Encabezado);
UTL_SMTP.WRITE_DATA(l_mail_conn, UTL_TCP.CRLF || p_Mensaje);
UTL_SMTP.CLOSE_DATA(l_mail_conn);
UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
BEGIN
UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
NULL; — When the SMTP server is down or unavailable, we don’t have
— a connection to the server. The QUIT call will raise an
— exception that we can ignore.
END;
raise_application_error(-20000,
‘Failed to send mail due to the following error: ‘ || sqlerrm);
END;

Probando el store procedure…
exec USRCORREO.ENVIA_CORREO (‘»Roberto M» <correo_que_envia@tucorreo.com.mx>’,’correo_destino@ctacorreodestino.com’,’Pruebas de correo’,’Cuerpo del correo electronico desde Base Oracle 11g’);

Categorías: Oracle

solaris 10 Firefox no navega pero si responde nslookup

diciembre 16, 2011 2 comentarios

Tengo configurado mi ip mi router, doy nslookup a google.com y me responde… pero firefox no navega!!!…..

Para solucionar esto; editar el archivo /etc/nsswitch.conf y agregar la palabra dns en las lineas hosts  e ipnodes quedando:

hosts: files dns

ipnodes: files dns

salvas y listo !

Categorías: General

Oracle 11g sobre Solaris 10 en virtualbox

diciembre 15, 2011 Deja un comentario

El software que usare es:

  1. Oracle 11gR2 for Solaris (x86-64). Descargalo  aqui.
  2. Oracle Solaris (x86-64). Descargalo aqui.
  3. Oracle VM VirtualBox 4.1.6. Descargalo aqui.

Una vez instalado el Virtualbox creamos una nueva maquina virtual. Yo la hice con 2048Mb de ram Disco duro SCSI de 60gb de tamaño fijo, la red como NAT . La asignacion de espacio quedo:

/ 20480Mb

swap 3072Mb

/u01  27648Mb

/export/home 10240Mb

Una vez concluida la instalacion. Se procede a instalar el Guest Additions. Esto iniciara el cd de virtualbox. Abrimos una terminal y ejecutamos:

#cd /cdrom/vboxadditions_4.1.6_74713

#sh autorun.sh

Cambiamos la configuracion del teclado a español; editamos el archivo xorg.conf :

#gedit /etc/X11/xorg.conf

y agregamos en la seccion del teclado la siguiente linea:

Option «XkbLayout» «es»

quedaria asi:

Section «InputDevice»
Identifier «Keyboard0»
Driver «kbd»
Option «XkbLayout» «es»
EndSection

guardamos y reiniciamos :

#reboot

Creamos una carpeta compartida para pasar los archivos que configuraran lo necesario para instalar la base oracle 11g.

luego la levantamos desde el terminal:

#pfexec mount -F vboxfs software /export/home/software/

Si deseamos que sea un montaje permanente editamos el archivo /etc/vfstab

software – /export/home/software/ vboxfs – yes –

copiamos los siguientes archivos a /export/home: orainst.sh y system

Contenido de orainst.sh

cp system /etc/system
groupadd oracle
groupadd oinstall
groupadd dba
groupadd oper
useradd -d /export/home/oracle -m -s /bin/bash -g oinstall -G dba,oracle oracle
echo ‘ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE’>/export/home/oracle/.profile
echo ‘ORACLE_SID=orcl; export ORACLE_SID’>>/export/home/oracle/.profile
cp oramin.profile /export/home/oracle/.profile
chown -R oracle:oinstall /export/home/oracle
chmod -R 755 /export/home/oracle
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 755 /u01

Contenido del archivo system:

*ident «@(#)system 1.18 97/06/27 SMI» /* SVR4 1.5 */
*
* SYSTEM SPECIFICATION FILE
*

* moddir:
*
* Set the search path for modules. This has a format similar to the
* csh path variable. If the module isn’t found in the first directory
* it tries the second and so on. The default is /kernel /usr/kernel
*
* Example:
* moddir: /kernel /usr/kernel /other/modules

* root device and root filesystem configuration:
*
* The following may be used to override the defaults provided by
* the boot program:
*
* rootfs: Set the filesystem type of the root.
*
* rootdev: Set the root device. This should be a fully
* expanded physical pathname. The default is the
* physical pathname of the device where the boot
* program resides. The physical pathname is
* highly platform and configuration dependent.
*
* Example:
* rootfs:ufs
* rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
*
* (Swap device configuration should be specified in /etc/vfstab.)

* exclude:
*
* Modules appearing in the moddir path which are NOT to be loaded,
* even if referenced. Note that `exclude’ accepts either a module name,
* or a filename which includes the directory.
*
* Examples:
* exclude: win
* exclude: sys/shmsys

* forceload:
*
* Cause these modules to be loaded at boot time, (just before mounting
* the root filesystem) rather than at first reference. Note that
* forceload expects a filename which includes the directory. Also
* note that loading a module does not necessarily imply that it will
* be installed.
*
* Example:
* forceload: drv/foo

* set:
*
* Set an integer variable in the kernel or a module to a new value.
* This facility should be used with caution. See system(4).
*
* Examples:
*
* To set variables in ‘unix’:
*
* set nautopush=32
* set maxusers=40
*
* To set a variable named ‘debug’ in the module named ‘test_module’
*
* set test_module:debug = 0x13
*
* Variables del Kernel de Oracle
*
set noexec_user_stack=1
set semsys:seminfo_semmni=100
set semsys:seminfo_semmns=1024
set semsys:seminfo_semmsl=256
set semsys:seminfo_semvmx=32767
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmni=100
set rlim_fd_max = 65536
set rlim_fd_cur = 65536

set maxuprc=16384

set max_nprocs=30000

Ejecutamos el archivo orainst.sh desde el terminal:

#sh orainst.sh

Revisamos que tengamos todos lo paquetes requeridos de Oracle en Solaris:

#pkginfo -i SUNWarc SUNWbtool SUNWhea SUNWlibC SUNWlibms SUNWsprot SUNWtoo

SUNWi1of SUNWi1cs SUNWi15cs SUNWxwfnt

Si faltan paquetes, cargar el cd de instalacion y ejecutar:

#pkgadd -d /cdrom/sol_10_910_x86/Solaris_10/Product  SUNWi15cs

Aqui solo me falto el paquete SUNWi15cs.

Realizamos ajustes al kernel; ejecutando el archivo ajustakernel.sh que contiene:

projadd -U oracle -K «project.max-shm-memory=(priv,4g,deny)» oracle
projmod -sK «project.max-sem-nsems=(priv,256,deny)» oracle
projmod -sK «project.max-sem-ids=(priv,100,deny)» oracle
projmod -sK «project.max-shm-ids=(priv,100,deny)» oracle

#sh ajustakernel.sh

Asignamos password al usuario oracle:

#passwd oracle

Damos logout a root y Nos logeamos como oracle. Copiamos los zips de la base a /export/home/oracle. Y luego extraemos la informacion de ellos:

#unzip solaris.x64_11gR2_database_1of2.zip

#unzip solaris.x64_11gR2_database_2of2.zip

#cd database

#./runInstaller

y comenzamos la instalacion del software.

Categorías: Oracle

Montar una imagen iso

septiembre 30, 2011 Deja un comentario

abrir una terminal

hdiutil mount imagen.iso

listo!!!

Categorías: Mac

Cambiando direccion ip en un solaris 8

Reseña de comandos que permiten hacer el cambio de ip en un solaris 8:

Ver las tarjetas de red activas
# ifconfig -a

El mundo de Solaris es un poco diferente al mundo Linuxero, pero con un simple comando podemos facilmente ver cuales NIC tenemos instaladas en nuestro SUN Solaris 10 Server:

# kstat -c net | grep net
name: dls_stat class: net
name: e1000g0 class: net
name: tcpstat class: net
name: tcpstat_g class: net
name: udpstat class: net

# ifconfig e1000g0
e1000g0: flags=201000843 mtu 1500 index 2
inet 10.0.1.10 netmask ffffff00 broadcast 10.0.1.255
ether 0:14:4f:8c:ba:22

Para poder configurar la direccion IP manualmente en nuestro Solaris 8, teclemos los siguientes comandos:
# ifconfig e1000g0 inet 192.168.1.5 netmask 255.255.255.0 up

Cambiar la ip en el archivo hosts
# cat /etc/hosts

En el /etc/resolv.conf, he añadido el DNS primario y el secundario

Crear un archivo / etc / defaultrouter archivo con la dirección IP de su router.

O Cambiar el gateway

Para ver la tabla de ruteo existente
# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
——————– ——————– —– —– ———- ———
192.168.1.0 192.168.1.10 U 1 195 hme0
224.0.0.0 192.168.1.10 U 1 0 hme0
default 192.168.1.1 UG 1 325
127.0.0.1 127.0.0.1 UH 5 92 lo0

Quitando el gateway default;

# route delete default 172.1.1.1

Agregando un nuevo Gateway:

# route add default 192.168.1.1

Categorías: General

Cómo cancelar una impresión en curso sin esperar años

Alguna vez intentaste cancelar un trabajo de impresión en Windows, y sientes que la cancelación tarda mucho tiempo y no pasa nada? Crea un archivo por lotes con el siguiente codigo:

@echo off
echo Deteniendo el proceso spoolsv.
echo.
net stop spooler
echo Eliminando documentos temporales de la cola de impresión
echo.
del /Q /F /S “%systemroot%System32SpoolPrinters*.*
echo Iniciando el proceso spoolsv.
echo.
net start spooler

Pero si tienes una impresora Lexmark debes agregar esta línea al final del archivo:

sc config spooler depend= RPCSS

El archivo lo salvas con extension bat…y lilsto!!…

Categorías: General

Instalacion del Clte Administrativo 9i en Windows 7 64 bits

enero 29, 2010 1 comentario

Despues de instalar el clte sucede que no podemos usar las herramientas como Enterprise Manager Console o Net Configuration Assistant ..mas si funciona la conexión usando sqlplus

Esto se debe a que Oracle no reconoce los paréntesis en la carpeta que genera win 64 bits
(“C:\Program Files (x86)”) para aplicaciones de 32bits

Para solucionar esto, copiar la carpeta oracle “C:\Program Files (x86)\Oracle” a una nueva carpeta la cual cree de nombre similar pero sin los paréntesis “C:\Program Filesx86\Oracle”

Entrar al regedit y dentro de Equipo\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE
Cambiar el valor de la cadena inst_loc. Que básicamente es cambiar al nuevo path ( quitar paréntesis )

Por ultimo modificar el archivo oemapp.bat y cambiar el path original “C:\Program Files (x86)\” x el nuevo; que solo son las sig. 2 lineas:
if Windows_NT == %OS% SET PATH=C:\Program Filesx86\Oracle\jre\1.1.8\bin;%PATH%
if not Windows_NT == %OS% SET PATH=»C:\Program Filesx86\Oracle\jre\1.1.8\bin;%PATH%»

Y con esto ya funciona!!!

Categorías: Oracle Etiquetas:

Oracle : Tablas y objetos bloqueados

agosto 14, 2009 Deja un comentario

Para obtener una lista con los objetos bloqueados ejecucutados:

select substr(a.os_user_name,1,8) «OS_User»
,substr(b.object_name,1,30) «Object_Name»
, substr(b.object_type,1,8) «Type»
, substr(c.segment_name,1,10) «RBS»
, e.process «PROCESS»
, substr(d.used_urec,1,8) «no_of_Records»
, e.sid
, e.serial#
, p.*
from
v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr;

Si intentamos por ejemplo hacer un «drop table» obtendremos un error del tipo ORA-00054: recurso ocupado y obtenido con NOWAIT.

Para desbloquear uno de los objetos usamos alguna de las siguientes sentencias

ALTER SYSTEM DISCONNECT SESSION ‘SID, SERIAL’ IMMEDIATE;

o bien

ALTER SYSTEM KILL SESSION ‘sid,serial#’ IMMEDIATE;

En el caso de que no finalice el proceso podemos matarlo desde el SO. Para ello utilizaremos lo siguiente desde un entorno linux:

kill -9 SPID

Donde el SPID lo podemos obtener en la consulta escrita anteriormente.

Fuente: http://dieguz2.blogspot.com/2007/10/oracle-tablas-y-objetos-bloqueados.html

Categorías: Oracle

Resta de fechas en Oracle

julio 14, 2009 Deja un comentario

Consultando foros de Oracle, me he dado cuenta de que muchos progrmadores no acaban de entender como funcionan las restas de fechas en Oracle (sobre todo si hay que calcular horas, minutos y/o segundos). Para calcular la distancia entre dos fechas, tenemos dos herramientas fundamentales: la función months_between, que nos da la distancia en meses, independientemente de que estos tengan 28, 29, 30 o 31días y la resta de fechas, que nos da la distancia en días. La parte entera de esta resta es el número de días, mientras que la parte decimal es la parte del día que ya se ha consumido (horas, minutos y segundos). Así, si multiplimamos la parte decimal por 24 (los días tienen 24 horas), obtendremos las horas. Si multiplicamos por 1440, los minutos y, si lo hacemos por 86400, los segundos.

Como ejemplo, os pongo un procedimiento que, para dos fechas, devuelve la distancia:

procedure devuelve_diferencia (
p_fec_inicio    IN    date,
p_fec_fin          IN    date,
p_anyos         OUT   number,
p_meses         OUT   number,
p_dias          OUT   number,
p_horas         OUT   number,
p_minutos       OUT   number,
p_segundos       OUT   number
) is
v_meses    number;
v_dias  number;
begin
– Obtenemos el total de meses para calcular los años
v_meses := FLOOR (MONTHS_BETWEEN (p_fec_fin, p_fec_inicio));
– Obtenemos los años cogiendo la parte entera
–    de la división de los meses por 12
p_anyos := FLOOR (v_meses / 12);
– Calculamos los meses
p_meses := MOD (v_meses, 12);
– Calculamos los días, restando los meses enteros
v_dias := p_fec_fin – ADD_MONTHS(p_fec_inicio, v_meses);
p_dias := FLOOR (v_dias);
– Calculamos las horas
v_dias := v_dias – p_dias;
p_horas := FLOOR (v_dias * 24);
– Calculamos los minutos
p_minutos := FLOOR( (v_dias – (1/24 * p_horas))*1440);
– Calculamos los segundos
p_segundos := v_dias – ((1/24 * p_horas) + (1/1440 * p_minutos));
p_segundos := MOD(ROUND(p_segundos * 86400), 60);
end devuelve_diferencia;

Fuente: http://www.bizzit.es/blog/?p=410

Categorías: Oracle