Quantcast
Channel: Informix Fun Facts
Viewing all articles
Browse latest Browse all 15

How to create a stored procedure which emulates a very fast dbexport in dirty read mode.

$
0
0

This is a simple stored procedure which will export the current database to the specified directory without locking the database. While this is a very simple procedure it can be extend very easily to accommodate parallel unloads based on the size of a table, scan tables in parallel and many other ways to customize this produce for your own needs.

 

CREATE FUNCTION export_system(load_dir VARCHAR(50) ) 
       RETURNING INTEGER, INTEGER
DEFINE rc                INTEGER;
DEFINE bad               INTEGER;
DEFINE create_ext_tab    LVARCHAR(8192);
DEFINE ins               LVARCHAR(512);
DEFINE drop_ext_tab      LVARCHAR(512);
DEFINE tname             VARCHAR(250);
DEFINE dbschema          LVARCHAR(1024);
DEFINE dbname            VARCHAR(250);
DEFINE numrows           INTEGER;

LET rc=0;
LET bad=0;
LET dbname = DBINFO("dbname");
LET dbschema = "dbschema -q -d "||TRIM(dbname)||" -it DR -ss "||
                TRIM(load_dir)||"/"||TRIM(dbname)||".sql";

SYSTEM dbschema;

SET ISOLATION TO DIRTY READ;

FOREACH SELECT   TRIM(tabname) ,nrows
     INTO tname,numrows
     FROM systables
     WHERE tabid >99 AND tabtype = "T"

     LET create_ext_tab = "CREATE EXTERNAL TABLE "||tname||"_ext "||
        " SAMEAS "||tname||" USING (" ||
        "DATAFILES('DISK:"||load_dir||"/"||tname||".unl'),"||
        "FORMAT 'DELIMITED', "|| "DELIMITER '|', "||
        "RECORDEND '', "||  "DELUXE, ESCAPE, "||
        "NUMROWS "|| numrows+1||", "||    "MAXERRORS  100, "||
        "REJECTFILE '"||load_dir||"/"||tname||".reject' " ||
        " )";

     LET ins = "INSERT INTO "||tname||"_ext SELECT * FROM "||tname;
     LET drop_ext_tab = "DROP TABLE "||tname||"_ext";

     EXECUTE IMMEDIATE create_ext_tab;
     EXECUTE IMMEDIATE ins;
     EXECUTE IMMEDIATE drop_ext_tab;

     LET rc = rc + 1;

END FOREACH

RETURN rc, bad;

END FUNCTION;

 


Viewing all articles
Browse latest Browse all 15

Trending Articles