Muchas veces tratamos de acceder a Oracle con el usuario "SYS" y nos muestra el siguiente error
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
Esto se soluciona de la siguiente manera
-Nos conectamos a oracle como sysdba y cambiamos el valor de O7_DICTIONARY_ACCESSIBILITY a true
SQL> conn / as sysdba
SQL> SHOW PARAMETER O7_DICTIONARY_ACCESSIBILITY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL> ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=TRUE scope=spfile;
2.-Damos de baja la base de datos y la iniciamos
SQL> shutdown immediate;
SQL> startup
3.-Ahora ya podemos conectanor con el usuario sys
SQL> conn sys/lennon
Connected.
SQL> show parameter O7_DICTIONARY_ACCESSIBILITY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean TRUE
NOTA: estas conectado como el usuario sys , pero no tienes el privilegio de sysdba asi que no podras ser dios :p
SQL> shutdown immediate;
ORA-01031: insufficient privileges
SQL> show user
USER is "SYS"
FUENTE:http://arjudba.blogspot.com/2008/05/ora-28009-connection-as-sys-should-be.html
viernes, 15 de abril de 2011
lunes, 11 de abril de 2011
Conectar Perl y Oracle
Pues esto de conectar varios lenguajes con Oracle como que ya se puso de moda,jajjajaja
a diferencia de la conexión de PHP y Oracle, la conexión con Perl es muy sencilla.
Primero q nada DBI, ya debe estar instalado, que seguramente lo esta lo checamos con este comando:
perl -e 'use DBI; print $DBI::VERSION,"\n";'
Bien ahora conseguimos el modulo DBD:Oracle, lo descomprimimos y ejecutamos:
perl Makefile.PL (asegurate de tener seteadas las varibles ORACLE_HOME y LD_LIBRARY_PATH)
make
make install
y listo!!!
Hacemos un sencillo script, para ver q todo furule
#!/usr/bin/perl
$oracle_server="192.168.2.100";
$oracle_listener="listener";
$oracle_sid="XE";
$oracle_port="1522";
$oracle_user="motor";
$oracle_password="lennon";
$oracle_testing_table="dual";
use DBI;
use DBD::Oracle;
my $dbh = DBI->connect("dbi:Oracle:host=$oracle_server;port=$oracle_port;sid=$oracle_sid",
$oracle_user, $oracle_password)
or die "Impossible de se connecter à la base Oracle : " . DBI->errstr;
my $sth = $dbh->prepare("SELECT sysdate FROM $oracle_testing_table")
or die "Impossible de preparer la requette: " . $dbh->errstr;
$sth->execute()
or die "Impossible d'exécuter la requette: " . $sth->errstr;
while ( my @data = $sth->fetchrow_array() )
{
my $date = $data[0];
print "Fecha: $date\n";
}
$sth->finish;
$dbh->disconnect;
a diferencia de la conexión de PHP y Oracle, la conexión con Perl es muy sencilla.
Primero q nada DBI, ya debe estar instalado, que seguramente lo esta lo checamos con este comando:
perl -e 'use DBI; print $DBI::VERSION,"\n";'
Bien ahora conseguimos el modulo DBD:Oracle, lo descomprimimos y ejecutamos:
perl Makefile.PL (asegurate de tener seteadas las varibles ORACLE_HOME y LD_LIBRARY_PATH)
make
make install
y listo!!!
Hacemos un sencillo script, para ver q todo furule
#!/usr/bin/perl
$oracle_server="192.168.2.100";
$oracle_listener="listener";
$oracle_sid="XE";
$oracle_port="1522";
$oracle_user="motor";
$oracle_password="lennon";
$oracle_testing_table="dual";
use DBI;
use DBD::Oracle;
my $dbh = DBI->connect("dbi:Oracle:host=$oracle_server;port=$oracle_port;sid=$oracle_sid",
$oracle_user, $oracle_password)
or die "Impossible de se connecter à la base Oracle : " . DBI->errstr;
my $sth = $dbh->prepare("SELECT sysdate FROM $oracle_testing_table")
or die "Impossible de preparer la requette: " . $dbh->errstr;
$sth->execute()
or die "Impossible d'exécuter la requette: " . $sth->errstr;
while ( my @data = $sth->fetchrow_array() )
{
my $date = $data[0];
print "Fecha: $date\n";
}
$sth->finish;
$dbh->disconnect;
miércoles, 30 de marzo de 2011
InstantBird

Es algo fastidioso para los nerds como yo tener tantos clientes abiertos para estar en la vida virtual como gtalk, msn , fb y yahoo.
Jajajaja asi que InstantBird es la solución, tan sencillo como
sudo apt-get install InstantBird
y listo ya podemos configurarlo y tener algo asi como en la pantalla.
NOTA: Al configurar el facebook, no se debe de poner en el campo Username el correo electrónico como seguramente todos lo hacen al ingresar al fb, si no el nombre de usuario del fb (si no lo conoces checalo en las configuraciones de tu perfil), y los otros dos campos se quedan igual, en mi caso :
Username: oscar.lennon
Domain: chat.facebook.com
Resource: Instantbird
Aqui el sitio Oficial:
http://instantbird.com/
Respaldar Base de datos Mysql
Pues el día de hoy unos de mi compañeros borró datos de una base de datos en un servidor Windows, asi que me tocó hacer un script. Para respaldar se usa mysqldump
Antes veremos una lista de comandos para acceder a mysql:
Algunas formas de entrar desde terminal:
1.-mysql -u usuario -p
2.-mysql -uusuario -ppassword
3.-mysql -u usuarip -P 8080 -p (P hace referencia al puerto)
4.-mysql -h localhost -u usuarip -p (H hace referencia al host)
Por default el usuario es root y el password admin.
Para ver las bases de datos creadas:
show databases;
Para usar una base de datos:
use nombre__base_de_datos;
Para ver las tablas
show tables;
MYSQLDUMP
Para hacer un respaldo de una base de datos se usa mysqldump, ejemplo:
mysqldump -u root -p admin --opt base_de_datos > respaldo_base_de_datos.sql
y listo!!!!! se creará un archivo llamado respaldo_base_de_datos.sql
Para restaurar la base de datos
mysql base_de_datos < respaldo_base_de_datos.sql
Para mas opciones de este comando :
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
Antes veremos una lista de comandos para acceder a mysql:
Algunas formas de entrar desde terminal:
1.-mysql -u usuario -p
2.-mysql -uusuario -ppassword
3.-mysql -u usuarip -P 8080 -p (P hace referencia al puerto)
4.-mysql -h localhost -u usuarip -p (H hace referencia al host)
Por default el usuario es root y el password admin.
Para ver las bases de datos creadas:
show databases;
Para usar una base de datos:
use nombre__base_de_datos;
Para ver las tablas
show tables;
MYSQLDUMP
Para hacer un respaldo de una base de datos se usa mysqldump, ejemplo:
mysqldump -u root -p admin --opt base_de_datos > respaldo_base_de_datos.sql
y listo!!!!! se creará un archivo llamado respaldo_base_de_datos.sql
Para restaurar la base de datos
mysql base_de_datos < respaldo_base_de_datos.sql
Para mas opciones de este comando :
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
viernes, 25 de marzo de 2011
VirtualBOx error 0x80004005
Pues hoy me aparecio este error al inciar VitualBox:
tart tag expected, '<' not found.
Location: '/home/oz/.VirtualBox/Machines/Windows/Windows.xml',
line 1 (0), column 1.
/build/buildd/virtualbox-ose-3.1.6-dfsg/src/VBox/Main/MachineImpl.cpp[5838]
(nsresult Machine::loadSettings(bool)).
Código Resultado:
NS_ERROR_FAILURE (0x80004005)
Componente: VirtualBox Interfaz:
IVirtualBox {2158464a-f706-414b-a8c4-fb589dfc6b62}
La solución????? Fácil
1.-sudo apt-get install dkms (pa actualizar esos paquetes)
2.-cd /etc/init.d sudo ./vboxdrv setup (se tardará un ratin)
3.-Inicias VirtualBox, y se crea una nueva máquina y al pedir un
"Disco Duro Virtual"
seleccionas el que ya tenias anteriormente.
4.-LISTO!!! Jajajajajja pues asi de fácil y sencillo es esto pero me
tarde una ratón en encontrar la solución.
martes, 15 de marzo de 2011
Restaurar una base de datos usando RMAN y el control file
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!
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!
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
Suscribirse a:
Entradas (Atom)