
Bases federadas y cursores
Publicado por Fredd (1 intervención) el 16/09/2022 01:52:15
Hola a todos
Necesito de su guía para trabajar con bases federadas en DB2, específicamente con cursores
Bases de datos: dblocal y dbremote
En la base dbremote tengo las tablas history_a y history_b
En la base dblocal tengo las tablas table_1 y table_2; y los apodos history_a y history_b (tablas federadas)
* Caso 1
En la tabla history_a debo cargar miles de resgitros de table_1.
Con un procedimiento almacenado NO es posible hacer una carga masiva en bases federadas con la opción LOAD FROM SELECT... OF CURSOR
CALL SYSPROC.ADMIN_CMD('LOAD FROM (DATABASE dblocal select C1, C2 from table_1' OF CURSOR INSERT INTO history_a))
Se recibe el error SQL2305N
ERROR [] [IBM][DB2/LINUXPPC64LE]
SQL2305N La tabla especificada es una vista o un apodo.
El programa de utilidad no se puede ejecutar en una vista o un apodo
Para solucionar hago uso de un procedimiento almacenado con la opción INSERT INTO table SELECT...
CREATE PROCEDURE myProcedure ()
begin
INSERT INTO history_a (select C1, C2 from table_1);
end;
La carga es satisfactoria aunque el tiempo es más alto usando INSERT comparado con el tiempo al usar LOAD
Q1: ¿Hay alguna manera de mejorar el rendimiento al hacer cargas masivas en bases federadas?
* Caso 2
En un procedimiento almacenado necesito devolver en el conjunto de datos de una consulta SQL que usa tablas locales y tablas federadas.
CREATE PROCEDURE myProcedure ()
begin
declare myCursor cursor with return to caller for select t1.c1, t2.c1, F_ha.c1, F_hb.c3... from table_1 t1, table_2 t2, history_a F_ha, history_b F_hb where...;
open myProcedure;
end;
Se recibe el error SQL0109N
ERROR [42601] [IBM][DB2/LINUXPPC64LE]
SQL0109N La sentencia o comando no se ha procesado porque no se soporta la siguiente cláusula en el contexto donde se utiliza: "WITH ISOLATION USE AND KEEP".
Q2: ¿Qué alternativas tengo para devolver el conjunto de datos desde una base federada?
--------------------------------------
[db2inst4@srv-db-dba-01 ~]$ db2level
DB21085I This instance or install (instance name, where applicable:
"db2inst4") uses "64" bits and DB2 code release "SQL11014" with level
identifier "0205010F".
Informational tokens are "DB2 v11.1.4.5", "special_40414",
"DYN1911120100PPCLE_40414", and Fix Pack "5".
Product is installed at "/opt/ibm/db2/V11.1".
[db2inst4@srv-db-dba-01 ~]$
--------------------------------------
Muchas gracias por su ayuda
Fredd
Necesito de su guía para trabajar con bases federadas en DB2, específicamente con cursores
Bases de datos: dblocal y dbremote
En la base dbremote tengo las tablas history_a y history_b
En la base dblocal tengo las tablas table_1 y table_2; y los apodos history_a y history_b (tablas federadas)
* Caso 1
En la tabla history_a debo cargar miles de resgitros de table_1.
Con un procedimiento almacenado NO es posible hacer una carga masiva en bases federadas con la opción LOAD FROM SELECT... OF CURSOR
CALL SYSPROC.ADMIN_CMD('LOAD FROM (DATABASE dblocal select C1, C2 from table_1' OF CURSOR INSERT INTO history_a))
Se recibe el error SQL2305N
ERROR [] [IBM][DB2/LINUXPPC64LE]
SQL2305N La tabla especificada es una vista o un apodo.
El programa de utilidad no se puede ejecutar en una vista o un apodo
Para solucionar hago uso de un procedimiento almacenado con la opción INSERT INTO table SELECT...
CREATE PROCEDURE myProcedure ()
begin
INSERT INTO history_a (select C1, C2 from table_1);
end;
La carga es satisfactoria aunque el tiempo es más alto usando INSERT comparado con el tiempo al usar LOAD
Q1: ¿Hay alguna manera de mejorar el rendimiento al hacer cargas masivas en bases federadas?
* Caso 2
En un procedimiento almacenado necesito devolver en el conjunto de datos de una consulta SQL que usa tablas locales y tablas federadas.
CREATE PROCEDURE myProcedure ()
begin
declare myCursor cursor with return to caller for select t1.c1, t2.c1, F_ha.c1, F_hb.c3... from table_1 t1, table_2 t2, history_a F_ha, history_b F_hb where...;
open myProcedure;
end;
Se recibe el error SQL0109N
ERROR [42601] [IBM][DB2/LINUXPPC64LE]
SQL0109N La sentencia o comando no se ha procesado porque no se soporta la siguiente cláusula en el contexto donde se utiliza: "WITH ISOLATION USE AND KEEP".
Q2: ¿Qué alternativas tengo para devolver el conjunto de datos desde una base federada?
--------------------------------------
[db2inst4@srv-db-dba-01 ~]$ db2level
DB21085I This instance or install (instance name, where applicable:
"db2inst4") uses "64" bits and DB2 code release "SQL11014" with level
identifier "0205010F".
Informational tokens are "DB2 v11.1.4.5", "special_40414",
"DYN1911120100PPCLE_40414", and Fix Pack "5".
Product is installed at "/opt/ibm/db2/V11.1".
[db2inst4@srv-db-dba-01 ~]$
--------------------------------------
Muchas gracias por su ayuda
Fredd
Valora esta pregunta


0