Pues el día de hoy se perdieron datos en la empresa, por lo cual fue necesario restaurar la base de datos a un punto anterior.
NOTA:Se contaba con respaldos generados por RMAN usando el control file.
1.-Primero se accede a la Base de datos y se verifican en donde estan los data_files, tan fácil como:
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u031/data/oracle/OPROD/users01.dbf
/u031/data/oracle/OPROD/undotbs01.dbf
/u031/data/oracle/OPROD/sysaux01.dbf
/u031/data/oracle/OPROD/system01.dbf
/u030/data/oracle/OPROD/data01.dbf
/u030/data/oracle/OPROD/data02.dbf
/u030/data/oracle/OPROD/indexes01.dbf
/u030/data/oracle/OPROD/indexes02.dbf
/u031/data/oracle/OPROD/rman_ts.dbf
En este caso se tenian los data files en diferentes directorios,regularmente es uno mismo.
Lo recomendable es mover las data files a otro directorio antes de restaurar la base de datos por si las moscas de que no salga bien.
Si se va a mover de directorio o renombrar se debe de verificar el espacio disponible y el tamaño de la base de datos
SQL> select sum(bytes)/1024/1024/1024 from dba_data_files;
SUM(BYTES)/1024/1024/1024
-------------------------
3.76098633
oracle@schnitzler:~$ df -h
/dev/sdb6 74G 2.1G 68G 3% /u030
/dev/sda7 73G 8.3G 61G 12% /u031
Vemos que si hay suficiente espacio, asi que seguimos XD
Como comentamos antes, necesitamos mover los data files a otro directorio :
Primero damos de baja la base de datos
SQL> shutdown immediate;
ahora renombramos los directorios con mv
mv /u031/data/oracle/OPROD /u031/data/oracle/OPROD_bk
mv /u030/data/oracle/OPROD /u030/data/oracle/OPROD_bk
y creamos los directorios para que no tengas problemas
mkdir /u031/data/oracle/OPROD
mkdir /u030/data/oracle/OPROD
NOTA:estos estarán vacios
Listo, ahora nos conectamos a RMAN y restauramos usando el control file
rman target / nocatalog
RMAN> startup nomount;
RMAN> restore controlfile from '/u050/respaldos_rman/backups/03_10_2011/OPROD.ctl';
Bien, en este momento se creo en control file, apartir de el crearemos la base de datos
RMAN> alter database mount;
RMAN> restore database;
Aqui se tardará un ratin dependiendo del tamaño de la base de datos, una vez terminado continuamos:
RMAN> recover database until sequence 380;
RMAN> alter database open resetlogs;
Y listo!!!! si se verifican los directorios ahi se verán los data_files XD
Bien ahora damos de baja la base de datos desde RMAN:
RMAN> shutdown immediate;
Ahora nos conectamos a Oracle y lo iniciamos podrán ver que todo esta super mega bien.
Por último no olviden reiniciar el listener!
martes, 15 de marzo de 2011
lunes, 7 de marzo de 2011
Conectar ORACLE con PHP usando la librería OCI8
*Requisitos previos:
Apache2 y PHP
Oracle (yo use el XE)
Bien en vdd que esto se me complico bastante, pero enseguida describiré el proceso más sencillo, para lograr este objetivo:
1.-Descargar las librerías necesarias:
apt-get install php5-dev
apt-get install php-pear
apt-get install build-essential
2.-Descargar OCI8
En otros blogs despuès de estos pasos te indican que descargues la última versión de SDK e Instant Client de Oracle, para posteriormente compilarlos con OCI8(que permite la conexiòn de oracle y php, pero esto es algo confuso, es màs fácil usar la librería pecl para hacerlo:
pecl install oci8
En seguida introduciomos nuestro $ORACLE_HOME , y se vera en la pantalla toda la instalación de OCI8
3.-Agregar oci8.so a php.ini
Ya sea usando echo
echo "extension=oci8.so" >> /etc/php5/cli/php.ini
echo "extension=oci8.so" >> /etc/php5/apache2/php.ini
o también con:
vi /etc/php5/cli/php.ini y agregar la linea extension=oci8.so
vi /etc/php5/apache2/php.ini y agregar la linea extension=oci8.so
4.-Reiniciar Apache
sudo /etc/init.d/apache2 restart
5.-Hacer prueba
--
PutEnv("ORACLE_SID=XE");
PutEnv("ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server");
PutEnv("LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib");
$ora_conn = oci_connect('scott','lennon','database_name');
$query = "SELECT deptno FROM emp";
$stid = OCIParse($ora_conn, $query);
if (oci_execute($stid))
{
while($res=oci_fetch_array($stid,OCI_NUM + OCI_RETURN_NULLS))
{
echo $res[0]."\n";
}
}
else {
$e = oci_error();
echo "error".$e["message"] ;
}
?>
y listo! en el navegador debería verse el resultado.
ALGUNAS CONSIDERACIONES:
Puedes verificar si funciona tu ejemplo.php en terminal usando :
php ejemplo.php
si funciona y no lo hace en el navegador, se debe a que debes de "setear" las variables $ORACLE_HOME , $LD_LIBRARY_PATH y $ORACLE_SID correctamente al inicio de tu archivo.
Si no quieres hacerlo en cada archivo que hagas, puedes exportar las variables en la configuración del Apache
vi /etc/init.d/apache2
y agregar las líneas
export ORACLE_SID=XE
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib
Apache2 y PHP
Oracle (yo use el XE)
Bien en vdd que esto se me complico bastante, pero enseguida describiré el proceso más sencillo, para lograr este objetivo:
1.-Descargar las librerías necesarias:
apt-get install php5-dev
apt-get install php-pear
apt-get install build-essential
2.-Descargar OCI8
En otros blogs despuès de estos pasos te indican que descargues la última versión de SDK e Instant Client de Oracle, para posteriormente compilarlos con OCI8(que permite la conexiòn de oracle y php, pero esto es algo confuso, es màs fácil usar la librería pecl para hacerlo:
pecl install oci8
En seguida introduciomos nuestro $ORACLE_HOME , y se vera en la pantalla toda la instalación de OCI8
3.-Agregar oci8.so a php.ini
Ya sea usando echo
echo "extension=oci8.so" >> /etc/php5/cli/php.ini
echo "extension=oci8.so" >> /etc/php5/apache2/php.ini
o también con:
vi /etc/php5/cli/php.ini y agregar la linea extension=oci8.so
vi /etc/php5/apache2/php.ini y agregar la linea extension=oci8.so
4.-Reiniciar Apache
sudo /etc/init.d/apache2 restart
5.-Hacer prueba
--
PutEnv("ORACLE_SID=XE");
PutEnv("ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server");
PutEnv("LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib");
$ora_conn = oci_connect('scott','lennon','database_name');
$query = "SELECT deptno FROM emp";
$stid = OCIParse($ora_conn, $query);
if (oci_execute($stid))
{
while($res=oci_fetch_array($stid,OCI_NUM + OCI_RETURN_NULLS))
{
echo $res[0]."\n";
}
}
else {
$e = oci_error();
echo "error".$e["message"] ;
}
?>
y listo! en el navegador debería verse el resultado.
ALGUNAS CONSIDERACIONES:
Puedes verificar si funciona tu ejemplo.php en terminal usando :
php ejemplo.php
si funciona y no lo hace en el navegador, se debe a que debes de "setear" las variables $ORACLE_HOME , $LD_LIBRARY_PATH y $ORACLE_SID correctamente al inicio de tu archivo.
Si no quieres hacerlo en cada archivo que hagas, puedes exportar las variables en la configuración del Apache
vi /etc/init.d/apache2
y agregar las líneas
export ORACLE_SID=XE
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib
ORA-27121: unable to determine size of shared memory segment
Pues creo q hoy no es mi día, pero en fin hoy tuve de miles de problemas, come este:
ERROR:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied
la solución?
cd $ORACLE_HOME/bin
sudo chmod 6751 oracle
y listo!!!!
ERROR:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied
la solución?
cd $ORACLE_HOME/bin
sudo chmod 6751 oracle
y listo!!!!
Desbloquear usuario sccott en Oracle
Recuerdo que algun momento cuando tomaba clases en el ITQ, tuve que instalar una base de datos y olvide desbloquear al usuario Scott y otros mas que se usaban para las prácticas, mi solución de aquellos días??? pues fué crear todas las tablas utilizando unos scripts que ni recuerdo donde estan jajajaja asumo que en $ORACLE_HOME/rdbms/admin/ pero no me consta.....
Bueno el chiste es que la solucion a este problemas es acceder a Oracle como sys , y utilizar el comando
ALTER USER username ACCOUNT UNLOCK;
y listo se le puede dar una contraseña
ALTER USER username IDENTIFIED BY password;
y ya!!!
jajajjajajajajja que fàcil no?
LOS AMO
Bueno el chiste es que la solucion a este problemas es acceder a Oracle como sys , y utilizar el comando
ALTER USER username ACCOUNT UNLOCK;
y listo se le puede dar una contraseña
ALTER USER username IDENTIFIED BY password;
y ya!!!
jajajjajajajajja que fàcil no?
LOS AMO
Robar constraseñas Oracle aprovechando el comando history
EL fin de esta entrada es ver algunos errores que seguramente usamos y que pueden usar otros usuarios para obtener nuestras credenciales de oracle.
Supongamos que solemos conectarnos a oracle asi:
sqlplus / as sysdba
sqlplus ' / as sysdba'
sqlplus scott/campeon
Esto al parecer no representa nada malo, pero la mayorìa de los usuarios de Linux saben que existe un buffer y un 'log' donde se almacenan los últimos comandos introducidos, entonces supongamos que prestamos la compu.
Pues nuestro querido amigo puede hacer lo siguiente, usar el comando history para ver los últimos comandos ingresados (regularmente este nos regresa los ùltimos 500 comandos introducidos).
Hacemos:
history | grep sqlplus
y si tenemos algo de suerte obtendremos las credenciales de algunos usuarios
1550 sqlplus
1551 sqlplus ruben/gay
1552 sqlplus janet/noni
1568 sqlplus
1572 sqlplus scott/campeon
y listo!!!!!
SOLUCION: cuando quieras iniciar oracle utiliza
sqlplus /nolog
y despuès la clausula
connect
Para evitar que se almacenen nuestras credenciales, :)
Bueno espero que ha alguien le sirva esta pequeña tranza pa hacer alguna broma :p
Supongamos que solemos conectarnos a oracle asi:
sqlplus / as sysdba
sqlplus ' / as sysdba'
sqlplus scott/campeon
Esto al parecer no representa nada malo, pero la mayorìa de los usuarios de Linux saben que existe un buffer y un 'log' donde se almacenan los últimos comandos introducidos, entonces supongamos que prestamos la compu.
Pues nuestro querido amigo puede hacer lo siguiente, usar el comando history para ver los últimos comandos ingresados (regularmente este nos regresa los ùltimos 500 comandos introducidos).
Hacemos:
history | grep sqlplus
y si tenemos algo de suerte obtendremos las credenciales de algunos usuarios
1550 sqlplus
1551 sqlplus ruben/gay
1552 sqlplus janet/noni
1568 sqlplus
1572 sqlplus scott/campeon
y listo!!!!!
SOLUCION: cuando quieras iniciar oracle utiliza
sqlplus /nolog
y despuès la clausula
connect
Para evitar que se almacenen nuestras credenciales, :)
Bueno espero que ha alguien le sirva esta pequeña tranza pa hacer alguna broma :p
Errores con el listener de Oracle (TNS-12555: TNS:permission denied)
Hace unos días felizmente instale Oracle XE en Ubuntu y funcionó.Pero unos días después al intentar iniciar el listener (para hacer la conexión con PHP) me marcaba un error:
TNError listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
Y bien si uno sabe leer inglés de primaria ahi dice que hay errores con los permisos, al checarlos TODO BIEN.
NOTA:casi siempre,la base de datos se instala con el usuario Oracle, si por algun motivo no está asi, y estàs iniciando la base de datos con otros usuario (por ejemplo oscar) puedes usar el siguiente comando para solucionarlo:
groups oscar //nos devolvera la infomaciòn de a que grupos pertenece el usuario oscar, si no aparecen los grupos "oinstall" o "dba", solo haces esto
adduser oscar oinstall
adduser oscar dba
Después de Gogglear un buen rato encontré la solución, pues resulta q el gay de Oracle, guarda registros de las bases de datos que se han instalado en algùn momento en el equipo, y bueno en algunas ocaciones instale otras versiones, ¿La solución?
Verificar los registros temporales de Oracle
Ir al directorio cd /var/tmp/.oracle y verificar los permisos si todo esta bien porcedes a eliminar todos los registros o todos los referentes a la base de datos que se este utilizando
sudo rm -R * //ASEGURATE DE ESTAR EN EL DIRECTORIO /var/tmp/.oracle ANTES DE USAR ESTE COMANDO
y listo ya podemos iniciar el listener
lsnrctl start
TNError listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
Y bien si uno sabe leer inglés de primaria ahi dice que hay errores con los permisos, al checarlos TODO BIEN.
NOTA:casi siempre,la base de datos se instala con el usuario Oracle, si por algun motivo no está asi, y estàs iniciando la base de datos con otros usuario (por ejemplo oscar) puedes usar el siguiente comando para solucionarlo:
groups oscar //nos devolvera la infomaciòn de a que grupos pertenece el usuario oscar, si no aparecen los grupos "oinstall" o "dba", solo haces esto
adduser oscar oinstall
adduser oscar dba
Después de Gogglear un buen rato encontré la solución, pues resulta q el gay de Oracle, guarda registros de las bases de datos que se han instalado en algùn momento en el equipo, y bueno en algunas ocaciones instale otras versiones, ¿La solución?
Verificar los registros temporales de Oracle
Ir al directorio cd /var/tmp/.oracle y verificar los permisos si todo esta bien porcedes a eliminar todos los registros o todos los referentes a la base de datos que se este utilizando
sudo rm -R * //ASEGURATE DE ESTAR EN EL DIRECTORIO /var/tmp/.oracle ANTES DE USAR ESTE COMANDO
y listo ya podemos iniciar el listener
lsnrctl start
jueves, 3 de marzo de 2011
Cambiar puerto de ssh
Tan solo se edita el siguiente archivo
vi /etc/ssh/sshd_config
y editar la linea q contien Port 22 por el nuevo puerto que se quiera asignar,
Y luego ya nomas se reinicia el servicio de ssh
sudo /etc/init.d/ssh restart
Y LISTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NOTA: cuando un usuario se conecte a tu máquina tendrá que indicar el puerto, ejemplo:
ssh -p 8080 oscar@192.168.2.100
vi /etc/ssh/sshd_config
y editar la linea q contien Port 22 por el nuevo puerto que se quiera asignar,
Y luego ya nomas se reinicia el servicio de ssh
sudo /etc/init.d/ssh restart
Y LISTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NOTA: cuando un usuario se conecte a tu máquina tendrá que indicar el puerto, ejemplo:
ssh -p 8080 oscar@192.168.2.100
Suscribirse a:
Entradas (Atom)