Sunday 1 January 2012

How to Restart BTEQ from the query it failed, thus skipping all the earlier successful queries?

1) Alternative 1
Create an empty file before you run the bteq(or we can use OS command to touch a empty file)
And write the bteq script as below:

     
     .logon tdpid/username,password;
     .OS if [ -f bteq_restart_step.txt ]; then else {touch bteq_restart_step.txt};
     .run file bteq_restart_step.txt;

     .label sql1;
     DML statement1 

     .if errorcode <> 0 then .goto EXIT_ERROR;
     .if errorcode = 0 then .os echo '.goto sql2' > bteq_restart_step.txt;

     .label sql2;   
     DML statement2
.if errorcode <> 0 then .goto EXIT_ERROR; 
     .if errorcode = 0 then .os echo '.goto sql3' >bteq_restart_step.txt;

     .label sql3;
     DML statement3

     .if errorcode <> 0 then .goto EXIT_ERROR; 
     .if errorcode = 0 then .os echo '.goto sql4' >  bteq_restart_step.txt;

     .label sql4;
     DML statement4

     .os rm -f bteq_restart_step.txt;
     .quit 0;

     .label EXIT_ERROR;
     .quit 99;

If the script completes sql1 and fails in the statement sql2 then the the file bteq_restart_step.txt will contain '.GOTO SQL2'. So when we restart the script it will run the '.run file' command and jump to the previously failed step.

2) Alternative 2
Create a wrapper script that will accept step number from the user and then change the bteq_restart_step.txt with appropriate stepnumber from where it has to be started.
 
3) Alternative 3

Create a multistatement request as follows:

DML statement1
;DML statement2
;DML statement3

This will create a transaction and hence it will either run completely or wont run itself.
In this case you wont have to worry about the restart. Just submit the script again.

No comments:

Post a Comment