En Oracle no hay un estamento o instrucción para mover o cambiar tablas de un esquema a otro. En este artículo voy a mostrar algunos métodos para mover tablas de un esquema a otro.
1 – Método usando sinónimos.
Este es el método más sencillo y que menos problemas nos acarreara, se base en crear un sinónimo público o privado de la o las tablas en cuestión.
Ejemplo:
Tenemos la tabla CLIENTES y el OWNER es el usuario LUIS, queremos que el usuario esquema ROBER pueda acceder a la tabla sin tener que anteponer el OWNER LUIS.
Podemos crear un sinónimo público o un sinónimo privado que pertenezca a ROBER.
Sinónimo Público, como usuario LUIS y vía SQLPLUS nos conectamos a la base de datos y creamos el sinónimo público.
SQL> CREATE PUBLIC SYNONYM CLIENTES FOR LUIS.CLIENTES;
Synonym created.
Consideraciones a tener en cuenta.
- El usuario LUIS tiene que tener el privilegio CREATE SYNONYM
- El usuario ROBER tiene que tener los privilegios necesario sobre la tabla LUIS.CLIENTES, es decir, tiene que tener privilegio SELECT, UPDATE, etc.
Ya podemos realizar SELECT o cualquier estamento SQL desde el usuario ROBER sin necesidad de hacer referencia al usuario esquema LUIS.
Sinónimo Privado, es muy parecido al anterior, la diferencia radica en que el sinónimo lo creara el usuario ROBER y él será el OWNER, por lo que si queremos que otros usuarios tengan visibilidad sobre el sinónimo, ROBER será quién de permiso sobre el sinónimo.
Nos conectamos como ROBER y desde SQLPLUS creamos el sinónimo.
SQL> CREATE SYNONYM CLIENTES FOR LUIS.CLIENTES;
Synonym created.
Consideraciones a tener en cuenta.
- El usuario ROBER tiene que tener el privilegio CREATE SYNONYM
- El usuario ROBER tiene que tener los privilegios necesario sobre la tabla LUIS.CLIENTES, es decir, tiene que tener privilegio de SELECT, UPDATE, etc.
2 – Método moviendo o copiando tabla del OWNER.
Si la tabla tiene pocas rows y no tiene dependencias, índices, vistas, etc. podemos utilizar este proceso.
Durante el proceso de copia tenemos que asegurarnos que no se producen actualizaciones en la tabla CLIENTES de LUIS, la vamos a poner en modo solo lectura mientras realizamos la copia, nos conectamos con el usuario LUIS y desde SQLPLUS.
Ejemplo:
SQL> ALTER TABLE CLIENTES READ ONLY;
Table altered.
Ahora nos conectamos con el usuario ROBER y realizamos la copia.
SQL> CREATE TABLE CLIENTES AS SELECT * FROM LUIS.CLIENTES;
Table created.
Comprobamos que la tabla CLIENTES en el SCHEMA ROBER esta correcta, por ejemplo realizando un COUNT(*)
SQL> SELECT COUNT(*) FROM CLIENTES;
COUNT(*)
--------
8
Una vez que estamos seguros que la tabla CLIENTES bajo el esquema ROBER es correcta, borramos la tabla del esquema LUIS, nos conectamos con el usuario LUIS y desde SQLPLUS.
SQL> DROP TABLE CLIENTES;
Table dropped.
{
xtypo_alert}Aviso: La operación de borrado de tabla no tiene posibilidad de marcha atrás, ROLLBACK.{/xtypo_alert}
Ahora el OWNER de la tabla CLIENTES es ROBER.
Si nuestra tabla o tablas tienen dependencias, índices, vistas, constraints, etc. el método más aconsejable es usar la herramienta exp para exportar la o las tablas y la utilidad imp para importarlas en el nuevo esquema, pero esto lo dejo para otro artículo.
Compatibilidad Oracle 9i, Oracle 10g y Oracle11g
Artículos relacionados
Mover Tablas de un tablespace a otro
Mover índices de un tablespace a otro
Estamento RENAME TO