2008-09-26 14 views
8

Para una agencia gubernamental, creamos un sistema de gestión de versiones desarrollado en PHP y Oracle. Los datos para esta aplicación se almacenan en tablas de la base de datos y se procesan con paquetes y procedimientos PL/SQL.¿Cómo acceder a Subversion desde Oracle PL/SQL?

El proceso de administración de versiones está ampliamente basado en metadatos provenientes de repositorios de Subversion. Accedemos a los repositorios desde PL/SQL a través de Oracle JVM interno para ejecutar comandos svn en el servidor Unix en el que se encuentran las instancias de Oracle. Los resultados de los comandos svn se reciben en XML y se analizan antes de ser procesados ​​por PL/SQL. El acceso a Subversion de esta manera no es muy eficiente para el uso repetido frecuente.

Actualmente, lo que hacemos es almacenar los metadatos de Subversion en las tablas de la base de datos en cada confirmación en los repositorios de Subversion (a través de los enlaces de Subversion). Extraemos la información de registro para cada transacción de Subversion y la guardamos en algunas tablas de Oracle. Entonces podemos obtener metadatos de Subversion con consultas SQL normales.

¿Hay mejores formas de acceder a Subversion desde PL/SQL?

+0

En mi empleador anterior, lo hicimos exactamente de esa manera. (Es decir, insertamos los metadatos de subversión en Oracle utilizando un enlace.) –

Respuesta

2

Si usa Java JVM de Oracle, puede intentar usar SVNKit para comunicarse con el servidor SVN nativamente de Java, en lugar de desembolsar al sistema operativo para ejecutar comandos.

+0

Actualmente, java es solo un paso entre el shell de UNIX y PL/SQL. Con SVNKit, tendría que reproducir en java lo que los comandos svn están haciendo para darme los resultados y definir una nueva estructura de datos antes de pasarla de nuevo a PL/SQL. No estoy seguro de la ganancia. – Bergeroy

+0

También podría definir interfaces entre PL/SQL y SVNKit, pero no estoy seguro de si los múltiples cambios de contexto necesarios para obtener un solo registro de revisión serían más efectivos que el análisis de un solo XML. Podría intentarlo. – Bergeroy

+0

Simplemente depende de lo que funcione mejor para usted. Casi siempre trato de encontrar una solución nativa, y luego vuelvo a ejecutar cosas de línea de comandos si la solución nativa resulta inviable. –

2

Creo que el flujo básico tiene sentido. Recomendaría hacer experimentos para ver dónde están exactamente los cuellos de botella de rendimiento y luego tomar si a partir de allí. Por ejemplo, ¿está cruzando de PL/SQL a Oracle JVM? ¿Está JVM bombardeando para ejecutar el comando svn? ¿Es el svn ida y vuelta? ¿Es el análisis del XML?

Digamos, por ejemplo, es el viaje redondo de svn. ¿Tal vez podría tener un proceso en la máquina de oráculos que almacena respuestas en caché del servidor svn para que a veces se evite el viaje de ida y vuelta? ¿Tal vez el viaje de vuelta svn podría ser asincrónico?

Pero, como dije, necesita saber dónde está el cuello de botella.

1

También estoy buscando una API para integrar Subversion y Oracle. Necesito poder extraer objetos Oracle PL/SQL (procedimientos, paquetes) en Subversion y luego, una vez que se hacen los cambios en los objetos, se debe aplicar a esos objetos en la base de datos Oracle.

+1

Para extraer los objetos PL/SQL, consulte la vista all_source. Para empujarlos de nuevo, considere un enganche post-commit en subversión. Se debe hacer un mapeo cuidadoso para que pueda decir en qué esquema debe compilarse un archivo determinado. –

Cuestiones relacionadas