Het komt voor dat er een database overgezet moet worden van server A naar server B maar dat de database op server B er anders uitziet dan die op server A. Op die momenten is het vaalk noodzakelijk op de create statements uit een exportfile te halen.
Een werkwijze wordt hieronder beschreven:
Eerst maken we een sqlfile van de dumpfile:
imp system/geheim fromuser=USER1 touser=USER2 file=dumpfile indexfile=/tmp/workfile1.sql Vervolgens passen we deze aan zodat alleen de tabellen aangemaakt worden: grep "^REM" /tmp/workfile1.sql > /tmp/workfile2.sql Of alleen de indexen: grep -v "^REM" /tmp/workfile1.sql > /tmp/workfile2.sql Verwijder alle regels met het woordje [rows] : grep -v rows /tmp/workfile2 > /tmp/workfile3.sql Met VI : Verwijder alle ["] in /tmp/workfile3.sql : [Esc][:]1,$s/"//g Substituut oude tablespace name met de nieuwe in /tmp/workfile3.sql: [Esc][:] 1,$s/TABLESPACE USERS/TABLESPACE DUMMY_DATA/g Nu kunnen we onderstaand script draaien dat een mooi sql statement zal genereren: ############################# # # # Auteur : Pieter de Bruijn # # # ############################# #!/bin/ksh toggle="N" > /tmp/workfile4.sql cat /tmp/workfile3.sql|while read Line do if [ "${toggle}" = "Y" ] then echo ${Line} >> /tmp/workfile4.sql echo ${Line}|grep ";" > /dev/null if [ $? = 0 ] then toggle="N" continue else continue fi else echo ${Line}|grep "CREATE TABLE" > /dev/null if [ $? = 0 ] then toggle="Y" echo "#--------------------------" >> /tmp/workfile4.sql echo ${Line} >> /tmp/workfile4.sql continue else continue fi fi Done De output zal er als volgt uit zien : $ pg /tmp/workfile4.sql #-------------------------- CREATE TABLE USER2.DUMMY_1 (DUMMY_ID NUMBER(5, 0) NOT NULL ENABLE, ASSET_DUMMY_ID VARCHAR2(1) NOT NULL ENABLE, PORTF_KENMERK VARCHAR2(25) NOT NULL ENABLE, DUMMY_BEGIN_DAT DATE NOT NULL ENABLE, DUMMY_EIND_DAT DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE DUMMY_DS LOGGING NOCOMPRESS ; #-------------------------- CREATE TABLE USER2.DUMMY_2 (MF_VOLGNR NUMBER(4, 0) NOT NULL ENABLE, DUMMY_ID NUMBER(5, 0) NOT NULL ENABLE, FONDS_CD NUMBER(5, 0) NOT NULL ENABLE, OPT_PERC NUMBER(5, 2) NOT NULL ENABLE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE DUMMY_DS LOGGING NOCOMPRESS ;
|