Exportar datos de una vista de Oracle a TXT

Necesito exportar datos de una vista de Oracle 9i a un fichero plano (tipo texto) ¿Qué comando o comandos se utilizan en oracle para exportar a este tipo de ficheros? Si no es posible ¿qué herramienta puedo utilizar? Nota: El proceso debe ser automático, para programar su ejecución una o varias veces al mes. Es bastante urgente.
1

1 respuesta

Respuesta
1
Anacb
Espero no haber tardado mucho en responderte.
El proceso es sencillo.
Tenemos que saber de que tablas consta la vista, para poder sacar todas las tablas en un fichero .dmp
Con la utilidad IMP de Oracle realizaremos una exportación de los datos que nos interesan de la siguiente forma:
EXP usuario/[email protected]_instancia file=/ruta/nomfichero.dmp log=/ruta/nom_fichero.log tables=tabla1 tabla2 tabla3...etc.. buffer=1000000
de este modo tendremos en un fichero las tablas que necesitamos.
Para poder meter esta información en otra base de datos, usaremos la utilidad IMP de oracle de la siguiente forma:
usuario/[email protected] file=/ruta/nom_fichero.dmp log=/ruta/nom_fichero.log tables=tabla1 tabla2 tabla3 etc... commit=y buffer=1000000
En cuanto al IMP hay duversas formas de sacar los datos, pero creo que esta es la forma que no te fallará.
La manera más fácil de ejecutar esto una vez al mes por ejemplo es hacer un fichero que se llame: (en caso de windows) expmensual.bat que contendrá lo siguiente:
set oracle_sid="instacia"
exp usuario/[email protected]_instancia file=/ruta/nomfichero.dmp log=/ruta/nom_fichero.log tables=tabla1 tabla2 tabla3...etc.. buffer=1000000
Y en principio no tienes porque tener más problemas en este tipo de operaciones; de ser así vuelve a preguntar e intentaré solucionarlo lo más rápidamente posible.
P.D: Si tu sistema operativo fuese unix, evidentemente no hace falta que la extensión del fichero de ejecución sea .bat, solo bastaría con conceder permisos y ejecutarlo con su propio nombre.
Hola pedrito, muchas gracias por tu rápida respuesta, aunque no creo que la pueda utilizar para mi caso. No tengo acceso al servidor de oracle, tengo un cliente oracle y en él sólo puedo acceder a las vistas que deseo exportar. Quiero coger los datos de la vista y a través de un script convertirlo a fichero de texto que contenga estos datos (no .dmp) porque no necesito importarlos de nuevo desde oracle, si no un fichero de datos para luego a través de BCP poderlos importar desde un servidor de SQL Server. Esta es la única opción que tengo porque no tengo conexión ODBC con el servidor Oracle desde SQLServer. Mi pregunta es ¿qué sentencia debo utilizar en el script para obtener este fichero de texto y que pueda generarse automáticamente todos los meses?
No problem.
Sacamos la información de la base de datos con UTL_FILE.
De esta forma podemos sacar la información ordenadamente y sabiendo de antemano la posición en el fichero, para luego tratarla como queramos, pero solo hay una pega: El fichero se va a quedar en un directorio del servidor; directorio que viene marcado por una entrada en el fichero de inicialización de parámetros de la base de datos.
Podemos, gracias a nuestros conocimientos, hacer un FTP al servidor, colocarnos en el directorio que nos interesa y traernos el fichero con la simple orden: GET.
Pero vamos a lo que vamos...
Te muestro a continuación una manera para poder sacar informacion; ten en cuenta que lo saco de una tabla, y no de una vista, pero en tu caso bastaría con poner el nombre de la vista y ya esta.
Declare
V_FICHERO UTL_FILE.FILE_TYPE;
CURSOR C1 IS
SELECT CODIGO_PROVINCIA||' '||PROVINCIA||' '||MATRICULA AS PROVINCIA
FROM TSPROVIN;
BEGIN
V_FICHERO:=UTL_FILE.FOPEN('/explo10/pruebas', 'pruebaplano.txt', 'W');
FOR C1REG IN C1
LOOP
UTL_FILE.PUT_LINE (V_FICHERO, C1REG.PROVINCIA);
END LOOP;
UTL_FILE.FCLOSE (V_FICHERO);
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE ('El fichero no existe');
END;
Creo que está bastante claro y no hace falta complicarse la vida en este tipo de operaciones, porque puedes llegar a volverte loco solucionando problemas de permisos y escritura, etc...
En el ejemplo yo he usado una base de datos que está montada en UNIX, por eso el nombre de los directorios aparecen con una barra por delante.
También te comento que existe otra forma de crear un fichero plano y que además quede en tu ordenador desde el servidor, pero esto si quieres lo podríamos usar si el tema del UTL_FILE no funcionase bien.
Espero esta sea la definitiva, pero si tienes problemas no dudes en preguntar, por que gustoso intentaré ayudarte.
Un saludo.
Pedro
P.D: También de este modo, puedes tener el fichero guardado y cuando lo necesites ejecutarlo, obteniendo los resultados rápido.
Muchísimas gracias, he probado en un servidor y funciona. El problema es que no puedo acceder al fichero del servidor oracle sobre el que tengo que ejecutarlo y por tanto no puedo pasarlo vía ftp al mío. Así que si puedes comentarme la otra forma para que el fichero se quede en mi ordenador te estaría muy, muy, muy agradecida.
Muchas gracias por todo. Saludos.
ANA
Ha pasado algún tiempo desde la última vez que hablamos, pero por si te interesa, la forma se puede hacer desde Forms, pero necesito saber si todavía te interesa. De todos modos yo como DBA ORACLE te recomiendo que hables con tu administrador de B.DE y que te facilite los ficheros, así en cuestión de 5 minutos o menos los tendrás en tu ordenador.
Perdona por la tardanza.
Pedro
Muchísimas gracias por tu colaboración aunque la verdad es que ya es un poco tarde. Al final lo hice a través de un DTS desde SQLServer e importe directamente las vistas de oracles cargándolas en tablas de sql con el mismo formato.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas