Dbcopy
Utility: dbcopy.ec Synopsis: Select data from one database/table and insert into another. Uses separate connections for FETCHing and INSERTing so the source and target can be local, remote, and even have different logging modes. Author(s): Art S. Kagel Version(s) supported: ESQL 7.2x, Client SDK 2.xx, OL 5.xx, IDS 7.xx Revision: 1.50a File(s): dbcopy.ec Comments: This is fast and low overhead. I have been able to run over 40 copies on a 32 processor box with production programs running concurrently and still gotten incremental increases in throughput from the Nth copy. Release Notes: Revision 1.52 expands the size of supported insert and select queries from 3k to 100k. Permanently made -I compatible with SDK versions prior to v3.00 and still support this IDS 11.10 server feature. Changed code to use snprintf for most copies to avoid memory overruns. Revision 1.50 adds support for the new IDS 11.10 isolation mode COMMITTED READ LAST COMMITTED with the new -I option. Revision 1.48 & 1.49 expands the -p to give the user complete control over PDQPRIORITY (was mapping the supplied argument to values in increments of 10 and did not support zero). Fixed -w to support NOT WAIT when the argument is zero (0). Revisions 1.46 &1.47 fix some errant type casts in diagnostic routines which are not normally executed, but which prevent compilation on some platforms. Revision 1.45 fixes a bug in using secured connections (ie w/username and password). Revision 1.44 cleaned up the Usage and expanded an error message. Revision 1.43 added -P &-U as alternatives to the environment variables to enter username and passwords. Added -a to cause dbcopy to acquire an exclusive lock on the target table before copying data. Revision 1.42 adds support for the environment variables INFORMIXUSER and INFORMIXPASS to simplify copying between hosts that are not trusted. Revision 1.39 fixes a problem with error code reporting in 64 bit compiles. Revision 1.40 is cosmetic. Revision 1.35 fixed a problem with using INFORMIXSERVER if -h/-H not provided. Revision 1.36 fixed the omission of CVCHARTYPE from dumprec() the error logging function. Thanks to Yvind Gjerstad for picking that up. While in there I decided CVCHARTYPE and CFIXCHAR should not have trailing spaces stripped in the log, but normal CCHARTYPE should. However, if using CHAR columns to pack binary data (ex: as a cheap BLOB) you do not want to strip. So default is to continue to treat CHAR columns as FIXCHAR but the new -L option will change that to use CCHARTYPE instead if the user knows there's no binary in the CHAR cols of the table being copied. Revisions 1.37 & 1.38 update the usage and copyright notice. Version 1.33 makes the code safe to use with IDS 9.xx long object names fixes some cut-and-paste born oddities in the source, and fixes a potential memory overwrite bug. Version 1.34 just updates the copyright statement. Revision 1.32 improved the -? and no args usage messages. Also updated the copyright information. Protected _H_LOCALEDEF from multiple definition (see notes on myschema.ec above). Fixed a compiler dependent warning. Revision 1.31 just cleaned up the RCS revision log. Revision 1.30 adds support for 9.21 data types and international character types and VARCHAR support was fixed.. Support added for INTEGER8, SERIAL8, BOOLEAN, VARCHAR, NCHAR, NVARCHAR, and LVARCHAR. Known problems: BLOB columns are output to the error log file using raw I/O so that the file cannot be used with dbload or dbaccess->LOAD to reload an edited and corrected log file. DATETIME and INTERVAL columns are represented internally as type string due to code to work around an old ESQL/C library bug. This has never been removed and MAY slightly affect throughput. Need to port the fix from ul.ec to dbcopy.ec. There seems to be some problem using dbcopy to copy from 7.3x to 9.xx. Investigating, but any help or insight is appreciated.