* IXXRESCUE.TXT
PROGRAM=NOT
CONTROL=PROGRAM,ERROR,SQL_DBO
BEGIN
=SET{WC.TRACE=1};
=SET{_TITLE='RESCUE 1'}; 
FORM=データベースが使えないので前回のバックアップで復元する為のプログラムです。
FORM=** ★注意：運用中のシステムで使用する場合は、当プログラムの内容を　**
FORM=**        十分確認してから使用して下さい。 　　　　　　　　　　　　**
FORM= @ (Enterで開始します）SYSTEM= @@@@@@@@ 
DATA={N}DUMY{1}
=IF{#SYSTEM!=}EXIT3{};
DATA={}RUN1{1}
W+=SET{WC.ERASE='ERASE /Q',WC.RMDIR='RMDIR /S /Q',WC.COPY_DIR='XCOPY /C /E /I /Y',WC.COPY_DIR_P=    ,WC.DQ='"'};
W+=SET{WC.COPY_FILE='COPY'};
U+=SET{WC.ERASE='rm -f'   ,WC.RMDIR='rm -R -f'   ,WC.COPY_DIR='cp -R'            ,WC.COPY_DIR_P='/*',WC.DQ=   };
W+=SET{WC.JAVA_MONO=};
U+=SET{WC.JAVA_MONO='mono'};IF{_FRAMEWORK='J'}SET{WC.JAVA_MONO='java'};
=SET{W0.SYSTEM=0,WSYSTEM=,WSEP=};
=DIR_DIR{?_OS_DRIVE??_P?I};
=DIR_DIR_NEXT:DIR_DIR_NEXT{WC.DIR}JUMP{DIR_DIR_END};
=SET{W0LEN=WC.DIR@LENGTH};COMPUTE{W0LEN-=2};
=IF{WC.DIR%'.I'}COMPUTE{W0.SYSTEM+=1}BACK{DIR_DIR_NEXT};
=IF{WC.DIR/'I.'}SET{WSYSTEM+=WSEP+WC.DIR[3],WSEP=','}COMPUTE{W0.SYSTEM+=1}BACK{DIR_DIR_NEXT};
=BACK{DIR_DIR_NEXT};
=DIR_DIR_END:IF_NAME{#SYSTEM}SET{SYSTEMX=#SYSTEM}EXIT2{SYSTEMX};
DATA=SYSTEMX{8,1,}
CHECK1=?WSYSTEM? 
=SET{_SYSTEM=SYSTEMX,W0SYSTEM_LENGTH=SYSTEMX@LENGTH};
=COMPUTE{W0DB_LENGTH=W0SYSTEM_LENGTH+3};
=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?I.?_SYSTEM??_P?BAT?_P?Z_SETUP.CFG,/};
=READ_NEXT{1,DRIVE1,DRIVE2,DRIVE3,DRIVE4,DRIVE5,OS_LOGIN,SECRET,GUEST,ARCHIVE,I_VER,I_JAVA_MONO,JAR,INSTALL_PATH,DATABASE_PATH};
=READ_CLOSE{R1};
=IF{_IV!=I_VER}ERROR{VERSION ERROR ?_IV?!=?I_VER?};
=IF{WC.JAVA_MONO!=I_JAVA_MONO}ERROR{FRAMEWORK ERROR ?WC.JAVA_MONO?!=?I_JAVA_MONO?};
=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?BIN?I_VER??_P?I_?_SERVER_NAME?_?_SYSTEM?.I,/};
=READ_NEXT{1,LANG_SYSTEM,SERVER,SYSTEM,DB_SOFT,SETUP,INSTANCE,SYSTEM_NAME,WC.PASSWORD_REAL
=,WC.PASSWORD_TEST,WC.PASSWORD_LINK};READ_CLOSE{R1};
=SET{_DB_SOFT=DB_SOFT,_SETUP=SETUP,_INSTANCE=INSTANCE};
=IF{SYSTEMX!=SYSTEM}ERROR{SYSTEM ERROR ?SYSTEMX?!=?SYSTEM?};
=SET{WC.FILE=_IV+'RESCUE_'+_SYSTEM};
=IF{_FRAMEWORK='J'}IF{#SYSTEM=}JUMP{EXE};
=IF{_DB='M'}SET{%RESCUE_M='+'}JUMP{};
=           SET{%RESCUE_M='-'};
*=IF{#SYSTEM!=}EXIT3{};
=EXIT{};
=EXE:EXE{java,-cp /home/I/BIN?_IV?/purejavacomm.jar:/home/I/BIN?_IV?/jna.jar:/home/I/BIN?_IV?/?JAR?:/home/I/BIN?_IV?/IJAVA.jar imenu_l JA 30/600/trace ?_IV?RESCUE.TXT SYSTEM=?SYSTEM?};
=EXIT{_END};
FORM=        REAL= @@@@@@@@ REAL_ETC= @@@@@@@@
FORM=        TEST= @@@@@@@@ TEST_ETC= @@@@@@@@ BACKUP= @@@@@@@@  
REPEAT=5
DATA={O}DRIVE##{8}
REPEAT=
FORM= OS_LOGIN= @@@ SECRET= @@@ GUEST= @@@ ARCHIVE @@@ I_VER @@@ I_JAVA_MONO @@@@
DATA={O}OS_LOGIN{3}
DATA={O}SECRET{3}
DATA={O}GUEST{3}
DATA={O}ARCHIVE{3}
DATA={O}I_VER{3}
DATA={O}I_JAVA_MONO{4}
FORM=JAR            @
DATA={O}JAR{50}
FORM=INSTALL_PATH   @
DATA={O}INSTALL_PATH{50}
FORM=DATABASEL_PATH @
DATA={O}DATABASE_PATH{50}
FORM= LANG_SYSTEM= @@ SERVER= @@@@@@@@@@@@@@@ SYSTEM= @@@@@@@@ DB_SOFT= @@@@@@@@
FORM=       SETUP= @
FORM=    INSTANCE= @@@@@@@@@@@@@@@@ SYSTEM_NAME= @
DATA={O}LANG_SYSTEM{2}
DATA={O}SERVER{16}
DATA={O}SYSTEM{8}
DATA={O}DB_SOFT{8}
DATA={O}SETUP{50}
DATA={O}INSTANCE{16}
DATA={O}SYSTEM_NAME{30}
FORM= @  (内容を確認しEnterで次に進んで下さい。)
DATA=RUN2{1}
MESSAGE=内容を確認しEnterで次に進んで下さい。　
PROGRAM=NOT
BEGIN
*=SET{_TITLE='RESCUE 2'};
=SET{LOGIN_ID=_LOGIN_ID_ADMIN};
=SET{WC.1='REAL_MAST',WC.2='REAL_WORK',WC.3='TEST_MAST',WC.4='TEST_WORK'};
=SET{WC.REAL1='REAL',WC.REAL2='TEST'};
=SET{WC.BAK_FILE=,WC.BAK_FILE_OK=,W0C2=0,WC.YES='NO'}
REPEAT=2
=SET{WC.PATH_DAT##_OK=};
=SET{WC.PATH_DAT##=};
=SET{WC.PATH_LOG##_OK=};
=SET{WC.PATH_LOG##=};
=SET{WC.PATH_DAT##_BAK_OK=};SET{WC.PATH_DAT##_BAK=};
=SET{WC.PATH_LOG##_BAK_OK=};
=SET{WC.PATH_LOG##_BAK=};
REPEAT=
M+FORM= ◎RDBMSの再インストールをした場合は次の作業を実行後続行して下さい。
M+FORM= 　(1)データベース本体と更新ログファイルに異常が無い事を前提に 
M+FORM= 　　インストール時点で構築されたドライブの該当ディレクトリ上に置いて下さい。 
M+FORM= 　　（続行後全DATABASEのSTATEがDETACHとなっていれば、ATACHコマンドで復元出来ます） 
M+FORM= 　(2)データベースの認証が混合モードになっていない場合は混合モードに変更して
M+FORM= 　　　SAのパスワードを設定して、SAを有効にして下さい。
M+FORM= 　(3)ネットワークからも使用する場合は構成マネージャでTCP/IPを有効に設定して下さい。
M+FORM= 　(4)ネットワークからも使用する場合はSQL Server Browserサービスを自動に設定し
M+FORM= 　　　起動して下さい。
M+FORM= 
M+FORM= ◎RDBMSは正常でインストールしたデータベースのどれかがクラッシュした場合は
M+FORM= 　バックアップされているデータベースファイルを使って復元します。
M+FORM= 　　（続行後DATABASEのSTATEがRECOVERYとなっている物が、RESTOREコマンドで復元出来ます） 
M+FORM= 
M+FORM= ◎バックアップデバイスやログインIDを誤って消してしまった場合も続行で復元出来ます。
M+FORM= 　　（続行後のSTATEがNONEとなっている物が復元出来ます） 
M+FORM= 
FORM= 　★Oracle,DB2以外はログインID（RDBMS管理者用)とパスワードを入力してください。
FORM=ADMIN LOGIN-ID @@@@@@@@@@@@@@
DATA=LOGIN_ID{14,,!}ログインID
=SET{_LOGIN_ID=LOGIN_ID};
W+I-=JUMP{USER_SKIP};
W+=SET{WC.USER=_LOGIN_ID};
U+=SET{WC.USER='root'};
=IF{WC.USER!=_USER}ERROR{Bad User ?_USER? (?WC.USER?)};
=USER_SKIP:
O+|I+=EXIT3{RUN};
U+D+=IF_ERROR_READ_OPEN{1,?INSTALL_PATH?/SYSDBA.password,/}JUMP{SYSDBA_SKIP};
U+D+=READ_NEXT{1,}JUMP{SYSDBA_SKIP};
U+D+=READ_NEXT{1,}JUMP{SYSDBA_SKIP};
U+D+=READ_NEXT{1,}JUMP{SYSDBA_SKIP};
U+D+=READ_NEXT{1,}JUMP{SYSDBA_SKIP};
U+D+=SPLIT_CHAR{WC.SYSDBA}{_READ_DATA}{'='};
U+D+=IF{_SPLIT_CHAR_COUNT!=2}JUMP{SYSDBA_SKIP};
U+D+=SET{_TRACE=0};
U+D+=SET{PASSWORD_ADMIN=WC.SYSDBA2};
U+D+=SET{_TRACE=$WC.TRACE};
U+D+=READ_CLOSE{R1};
U+D+=EXIT3{RUN};
U+D+=SYSDBA_SKIP:READ_CLOSE{R1};
FORM=ADMIN PASSWORD 
FORM=@
DATA=PASSWORD_ADMIN{80,,!,*}管理者パスワード
FORM=@
=EXIT3{RUN};
FORM=@
DATA=RUN{1}
=NOP{SET/_LOGIN_PASSWORD='****'};
=SET{_TRACE=0};
=SET{_LOGIN_PASSWORD=PASSWORD_ADMIN};
=SET{_TRACE=$WC.TRACE};
=SET{WSW=0};
=SET{WC.SKIP_SW=0,DB_ERROR=,ERROR=};
=IF_NOT{_DB='D',='L',='M',='P'}JUMP{SKIP};
=IF_ERROR_LOGIN_SQL{SELECT ?_NOW0? ?_FROM_DUAL?}IF_ERROR_SET{DB_ERROR=_DB_ERROR,ERROR=_ERROR}NOP{};
*=IF    {_DB='H'}IF_ERROR_LOGIN_SQL{SELECT * FROM MASTER.SQL_USERS}IF_ERROR_SET{DB_ERROR=_DB_ERROR,ERROR=_ERROR}NOP{};
D+=SET{WC.MSG='Unable to complete network request to host'};
L+=SET{WC.MSG='Unable to connect to any of the specified'};
L+=IF{_FRAMEWORK='J'}SET{WC.MSG='Could not connect to address'};
M+=SET{WC.MSG='(0)SQL Server'};
P+=SET{WC.MSG='()Failed to establish a connection to'};
P+=IF{_FRAMEWORK='J'}SET{WC.MSG='Connection to'};
=IF{ERROR/WC.MSG}ERROR{サービスが起動していない可能性が有ります。起動してから続行して下さい。};
D+=SET{WC.MSG='Your user name and password are not defined.'};
L+=SET{WC.MSG='Authentication to host'};
L+=IF{_FRAMEWORK='J'}SET{WC.MSG='Could not connect:'};
M+=SET{WC.MSG='M18456'};
P+=SET{WC.MSG='P28P01'};
M-P-=IF{ERROR/
M+|P+=IF{DB_ERROR=
=              WC.MSG}ERROR{パスワードが正しくない可能性があります。};
=SKIP:
M+=SET{WC.VER='10'};
M+=IF{_DB_SOFT/'M2016'}SET{WC.VER='13'};
M+=IF{_DB_SOFT/'M2014'}SET{WC.VER='12'};
M+=IF{_DB_SOFT/'M2012'}SET{WC.VER='11'};
M+=SET{WC.LOG_FILE='?_OS_DRIVE?\Program Files\Microsoft SQL Server\MSSQL?WC.VER?.?_INSTANCE?\MSSQL\Log\ERRORLOG'};
=IF{_DB!='M'}EXIT{};M以外終了*
=IF{_DB='P',_DB='O',_DB='D'}SET{WC.PWD_TYPE1='A'}JUMP{};
=SET{WC.PWD_TYPE1='H'};
=IF{_DB='F'}SET{W0.PWD=8,W0.PWD_LEN=8}JUMP{};
=SET{W0.PWD=1,W0.PWD_LEN=14};
=SET{WC.I='I',WC.U='_'};
=SET{WC.R.T1='R',WC.R.T2='T'};
=SET{WC.M.W1='M',WC.M.W2='W'};
=SET{WC.R.T.T1='R',WC.R.R.T1='R'};
=SET{WC.R.T.T2='T',WC.R.R.T2='R'};
=SET{WC.R.T.T3='T',WC.R.R.T3='T'};
=SET{WC.D.I.O.L1='D',WC.D.I.O.L2='I',WC.D.I.O.L3='O',WC.D.I.O.L4='L'};
=SET{WN.REAL.TEST.LINK1='本番',WN.REAL.TEST.LINK2='テスト',WN.REAL.TEST.LINK3='リンク'};
=SET{WC.I_SYSTEM=WC.I+WC.U+_SYSTEM+WC.U};
=IF_ERROR_LOGIN_SQL{DROP TABLE WORK_TABLEA}NOP{};
=LOGIN_SQL{CREATE TABLE WORK_TABLEA(OK INT,MW_RTL INT,KIND CHAR(10),NAME CHAR(23) 
=,STATE CHAR(8),STATE1 CHAR(9),STATE2 CHAR(9),DRIVE1 CHAR(1),DRIVE2 CHAR(1),FILE_NAME1 CHAR(53),FILE_NAME2 CHAR(57))};
=SET{W0.PERMISSION=0};
=IF_ERROR_READ_OPEN{1,?_OS_DRIVE??_P?I?_P?I.?_SYSTEM??_P?BAT?_P?Z_PERMISSION.CFG,/}ERROR{};
=READ_NEXT_R1:READ_NEXT{1,WC.PERMISSION}JUMP{READ_END_R1};
=COMPUTE{W0.PERMISSION+=1};SET{WC.PERMISSION?W0.PERMISSION?=WC.PERMISSION};
REPEAT=2 (## R,T)
1+=SET{WC.DRIVE1=$DRIVE1,WC.DRIVE2=$DRIVE2};
2+=SET{WC.DRIVE1=$DRIVE3,WC.DRIVE2=$DRIVE4};
REPEAT2=4 ($$ D,I,O,L)
=SET{W0.R.T.L=##};
$4+=SET{W0.R.T.L=3};
=LOGIN_SQL{   INSERT INTO WORK_TABLEA (MW_RTL,KIND,NAME)        VALUES(?W0.R.T.L?,'LOGIN','?WC.I_SYSTEM??WC.R.T##?_?WC.D.I.O.L$$?_?WC.PERMISSION?')};
REPEAT2=2 ($$ M,W)
=LOGIN_SQL{   INSERT INTO WORK_TABLEA (MW_RTL,KIND,NAME,DRIVE1,DRIVE2) VALUES($$,'DATABASE'  ,'?WC.I_SYSTEM??WC.R.T##?_?WC.M.W$$?_?WC.PERMISSION?','?WC.DRIVE1?','?WC.DRIVE2?')};
=LOGIN_SQL{   INSERT INTO WORK_TABLEA (MW_RTL,KIND,NAME,DRIVE1)        VALUES($$,'BACKUP_DAT','?WC.I_SYSTEM??WC.R.T##?_?WC.M.W$$?_?WC.PERMISSION?_DAT','?WC.DRIVE2?')};
$2-=LOGIN_SQL{INSERT INTO WORK_TABLEA (MW_RTL,KIND,NAME,DRIVE1)        VALUES($$,'BACKUP_LOG','?WC.I_SYSTEM??WC.R.T##?_?WC.M.W$$?_?WC.PERMISSION?_LOG','?WC.DRIVE2?')};
REPEAT=
=BACK{READ_NEXT_R1};
=READ_END_R1:READ_CLOSE{R1};
FORM=@
DATA={O}ERROR{80}
FORM=@
DATA={O}DB_ERROR{20}
**********************************************************
************( RESCUE M 以外 )*****************************************
**********************************************************
%RESCUE_M+COMMENT_BEGIN
*****( 1)*************************************************************************************************
***( 復元 )*********************************************************************************
**********************************************************************************************************
=READ_OPEN{1,?_OS_DRIVE??_P?I?_P?I.?_SYSTEM??_P?BAT?_P?Z_SETUP.CFG,/};
=READ_NEXT{1,WC.DRV_DAT1,WC.DRV_LOG1,WC.DRV_DAT2,WC.DRV_LOG2}READ_CLOSE{R1}ERROR{CFG FILE DATA NOT FOUND};
=READ_CLOSE{R1};
W+=SET{WC.DRVL=   ,WC.DRVR=':'};
U+=SET{WC.DRVL='/',WC.DRVR=};
I-=SET{WC.I_ADD=};
I+=SET{WC.I_ADD='_'+_SYSTEM};
REPEAT=2 (1=REAL,2=TEST)
=IF{WC.DRV_DAT##!=}SET{WC.PATH_DAT##=WC.DRVL+WC.DRV_DAT##+WC.DRVR+_P+'I'+_P+'DATABASE_DAT_'+_DB+WC.I_ADD};
=IF{WC.DRV_LOG##!=}SET{WC.PATH_LOG##=WC.DRVL+WC.DRV_LOG##+WC.DRVR+_P+'I'+_P+'DATABASE_LOG_'+_DB+WC.I_ADD};
=IF{WC.DRV_LOG##!=}SET{WC.PATH_DAT##_BAK=WC.DRVL+WC.DRV_LOG##+WC.DRVR+_P+'I'+_P+'BACKUP_DAT_'+_DB+WC.I_ADD};
=IF{WC.DRV_LOG##!=}SET{WC.PATH_LOG##_BAK=WC.DRVL+WC.DRV_LOG##+WC.DRVR+_P+'I'+_P+'BACKUP_LOG_'+_DB+WC.I_ADD};
P+W+=IF{WC.DRV_LOG##!=}SET{WC.PATH_LOG##_BAK_YEN2=WC.DRVL+WC.DRV_LOG##+WC.DRVR+_P+_P+'I'+_P+_P+'BACKUP_LOG_'+_DB};
REPEAT=
=SET{W0C2=0};
=SET{WC.YES='YES,NO'};
=SET{WC.PATH_LOG=WC.PATH_LOG1};
=LOOP:
=WRITE_OPEN{1,?_TMP??WC.FILE?.TMP,OT,/};WRTE_CLOSE{W1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TMP};
O+=WRITE_OPEN{1,?_TMP??WC.FILE?.TXT,OT,/};
O+=WRTE{1,'ALTER DATABASE OPEN;'};
O+=WRTE{1,'EXIT'};
O+=WRTE_CLOSE{W1};
O+=WRITE_OPEN{1,?_TMP??WC.FILE?_RDBMS.BAT,OT,/};
O+=SET{WC.SQLPLUS='sqlplus -l / as sysdba @?_TMP??WC.FILE?.TXT >> ?_TMP??WC.FILE?.TMP 2>&1'};
O+W+=WRTE{1,WC.SQLPLUS};
O+U+=WRTE{1,'. ?INSTALL_PATH??_P?bin?_P?oracle_env.sh'};
O+U+=WRTE{1,'  ?INSTALL_PATH??_P?bin?_P??WC.SQLPLUS?'};
O+=WRTE_CLOSE{W1};
O+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_RDBMS.BAT};
O+W+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};
O+U+=COMMAND{su -c ?_TMP??WC.FILE?_RDBMS.BAT oracle};
O+****( ORACLE ERROR 解析 )*******
O+NAME=ORACLE_CHECK
O+=SET{WC.DB_ERROR=,WC.DB_FULL_FILE=,WC.DB_FULL_FILE_OK=,WC.DB_FULL_FILE_COPY=,WC.DB_FULL_FILE_BAK=};
O+=READ_OPEN{1,?_TMP??WC.FILE?.TMP,/};
O+=READ_NEXT_R1:READ_NEXT{1,}JUMP{READ_END_R1};
O+=IF{_READ_DATA=,='*'}BACK{READ_NEXT_R1};
O+=IF{_READ_DATA/'SP2-0751:',/'ORA-01034:'}READ_CLOSE{R1}ERROR{Oracleサービスが起動していません。起動してから続行して下さい。};
O+=IF{_READ_DATA/'ORA-12560:'}READ_CLOSE{R1}ERROR{Oracleサービスが起動していない可能性が有ります。起動してから続行して下さい。};
O+=IF{_READ_DATA!/'ORA-'}BACK{READ_NEXT_R1};
O+=IF{_READ_DATA/'ORA-01109',/'ORA-00283',/'ORA-00246',/'ORA-01531',/'ORA-01110'}BACK{READ_NEXT_R1};
O+=SET{WC.DB_ERROR=_READ_DATA[1;9]};
O+=IF{_READ_DATA!/'ORA-01157'}JUMP{ERR};
O+=READ_NEXT_R1:READ_NEXT{1,}JUMP{ERR};
O+=IF{_READ_DATA!/'ORA-01110'}BACK{READ_NEXT_R1};
O+=SET{_FIND_CHAR=_READ_DATA+'''',_FIND_CHAR_LAST=_READ_DATA+''''};
O+=IF{_FIND_CHAR=0,_FIND_CHAR_LAST=0,_FIND_CHAR>=_FIND_CHAR_LAST}JUMP{ERR};
O+=COMPUTE{W0START=_FIND_CHAR+1};
O+=SET{WC.DB_FULL_FILE=_READ_DATA[W0START;_FIND_CHAR_LAST-W0START]};
O+=SET{WC=WC.DB_FULL_FILE};
O+=SET{_FIND_CHAR_LAST=WC+_P};COMPUTE{W0START=_FIND_CHAR_LAST+1};
O+=IF{_FIND_CHAR_LAST<3}JUMP{ERR};
O+=SET{WC.DB_PATH=WC[1;W0START-2]};
O+=SET{WC.DB_FILE=WC[W0START]};
O+=SET{WC.DB_FULL_FILE_BAK=WC.PATH_DAT1_BAK+_P+WC.DB_FILE};
O+=SET{WC=WC.DB_FULL_FILE_BAK};
O+=IF_FILE_NOT{?WC?}JUMP{ERR};
O+=SET{WC=WC.DB_PATH};
O+=IF_ERROR_DIR{?WC?}JUMP{ERR};
O+=SET{WC.DB_FULL_FILE_OK='OK'};
O+=JUMP{READ_END_R1};
O+=ERR:SET{WC.DB_FULL_FILE_OK='BAD',WC.YES='NO'};
O+=READ_END_R1:READ_CLOSE{R1};
O+NAME=
O+=IF{WC.DB_FULL_FILE_OK=}ERROR{全て正常で、復元対象はありません。};
O+=IF{WC.DB_FULL_FILE_OK!='OK'}ERROR{?_READ_DATA?};
=SET{WC.DAT_LOG1='DAT',WC.BAK1=,WC.BAK2='_BAK'};
REPEAT=2  (1=REAL,2=TEST)
REPEAT2=2 (1='',2='_BAK')
=SET{WC.PATH_DAT##$$='WC.PATH_DAT##?WC.BAK$$?'};
=SET{WC.PATH_LOG##$$='WC.PATH_LOG##?WC.BAK$$?'};
REPEAT=
I+W+    =SET{WC.PATH_DAT1=};
D-M-O-I-=SET{WC.PATH_DAT1=};
M-I-    =SET{WC.PATH_LOG1=};
D+      =SET{WC.PATH_LOG1_BAK=};
REPEAT=2 (1=REAL,2=TEST)
REPEAT2=2 (1='',2='_BAK')
=SET{WC.DIR=?WC.PATH_DAT##$$?};
=IF{WC.DIR=}JUMP{OK};
=IF_ERROR_DIR_DIR{?WC.DIR?}JUMP{ERR};
=SET{?WC.PATH_DAT##$$?_OK='OK',?WC.PATH_DAT##$$?_OK@COLOR='W'};
=JUMP{OK};
=ERR:SET{?WC.PATH_DAT##$$?_OK='BAD',?WC.PATH_DAT##$$?_OK@COLOR='R',WC.YES='NO'};
=OK:
=SET{WC.DIR=?WC.PATH_LOG##$$?};
=IF{WC.DIR=}JUMP{OK};
=IF_ERROR_DIR_DIR{?WC.DIR?}JUMP{ERR};
=SET{?WC.PATH_LOG##$$?_OK='OK',?WC.PATH_LOG##$$?_OK@COLOR='W'};
=JUMP{OK};
=ERR:SET{?WC.PATH_LOG##$$?_OK='BAD',?WC.PATH_LOG##$$?_OK@COLOR='R',WC.YES='NO'};
=OK:
REPEAT=
=SET{WC.BAK_FILE=?WC.PATH_DAT12?};
=IF{WC.YES='NO'}EXIT{};
*****( BAK FILE 確認 )***
D+=SET{WC.BAK_FILE=?WC.PATH_DAT12?+_P+'BACKUP_DAT_?_SYSTEM?'};
L+=SET{WC.BAK_FILE=?WC.PATH_DAT12?+_P+'BACKUP_DAT'};
P+=SET{WC.BAK_FILE=?WC.PATH_DAT12?+_P+'pg_hba.conf'};
D+|L+|P+=IF_FILE{?WC.BAK_FILE?}JUMP{OK};JUMP{ERR};
=DIR{?WC.BAK_FILE?};
=DIR_NEXT{}JUMP{ERR};JUMP{OK};
=ERR:SET{WC.BAK_FILE_OK='BAD',WC.YES='NO'};EXIT{};
=OK:SET{WC.BAK_FILE_OK='OK'};
******************( 5 )***********************************************************************************
PROGRAM=NOT
FORM=      (復元処理を実行します）
BEGIN
=SET{_TITLE='RESCUE3'}; 
=SET{WC.YES=$WC.YES};
NAME=PATH
FORM=             判定 ディレクトリ
REPEAT=2
FORM=?WC.REAL##?_DAT     @@@ @@
DATA={O}$WC.PATH_DAT##_OK{3}
=IF{WC.PATH_DAT##_OK='BAD'}SET{WC.PATH_DAT##_OK@COLOR='R'};
DATA={O}$WC.PATH_DAT##{34}
FORM=?WC.REAL##?_LOG     @@@ @@
DATA={O}$WC.PATH_LOG##_OK{3}
=IF{WC.PATH_LOG##_OK='BAD'}SET{WC.PATH_LOG##_OK@COLOR='R'};
DATA={O}$WC.PATH_LOG##{34}
FORM=?WC.REAL##?_DAT_BAK @@@ @@
DATA={O}$WC.PATH_DAT##_BAK_OK{3}
=IF{WC.PATH_DAT##_BAK_OK='BAD'}SET{WC.PATH_DAT##_BAK_OK@COLOR='R'};
DATA={O}$WC.PATH_DAT##_BAK{34}
FORM=?WC.REAL##?_LOG_BAK @@@ @@
DATA={O}$WC.PATH_LOG##_BAK_OK{3}
=IF{WC.PATH_LOG##_BAK_OK='BAD'}SET{WC.PATH_LOG##_BAK_OK@COLOR='R'};
DATA={O}$WC.PATH_LOG##_BAK{34}
REPEAT=
FORM=確認ファイル @@@ @@
DATA={O}$WC.BAK_FILE_OK{3}
=IF{WC.BAK_FILE_OK='BAD'}SET{WC.BAK_FILE_OK@COLOR='R'};
DATA={O}$WC.BAK_FILE{50}
NAME=
FORM=@
DATA={O}$ERROR{80}  
O+FORM=
O+FORM=ERROR     TABLESACE_FILE                                     FILE * COPY
O+FORM=@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@  * @@@ 
O+DATA={O}$WC.DB_ERROR{9}
O+DATA={O}$WC.DB_FULL_FILE{50}
O+DATA={O}$WC.DB_FULL_FILE_OK{3}
O+DATA={O}WC.DB_FULL_FILE_COPY{3}
O+FORM=          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
O+DATA={O}$WC.DB_FULL_FILE_BAK{50}
FORM= ★判定にBADが有る場合は続行できません。BADを解消してから再実行して下さい。
L+|O+|P+FORM=  *警告*[RDBMSが再起動されます]*警告*！！！
D+FORM=  *注意* 更新記録の保管機能が無いので前回のバックアップ時点に復元されます。
FORM= @@@@ {YES,NO} (★YESで現ファイルのバックアップを開始します。 ORG-->OLD）
DATA=YES{4}
CHECK=?WC.YES?
=WRITE_OPEN{1,?_TMP??WC.FILE?.TMP,OT,/};WRTE_CLOSE{W1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TMP};
=IF{_DATA='NO'}EXIT{0};
=IF{_DATA='SKIP'}EXIT{};
=SET{WC.YES='SKIP'};
*=====(　ORG==>OLD 現在のファイルをOLDへコピー )============================================
=SET{WC.ORG=};
=SET{WC.TODAY_TIME_CLIENT=_TODAY_TIME_CLIENT};
=SET{WC.TODAY_TIME=WC.TODAY_TIME_CLIENT[1;8]+'.'+WC.TODAY_TIME_CLIENT[9]};
D+=SET{WC.ORG=$WC.PATH_DAT1,WC.ORG_FILE=WC.ORG+_P+'I_'+_SYSTEM+'.FDB'};
I+W+=SET{WC.ORG=$DRIVE1+':'+_P+'DB2'+_P+'NODE0000'+_P+'I_'+_SYSTEM};
I+U+=SET{WC.ORG=$WC.PATH_DAT1};
L+W+=SET{WC.ORG=$INSTALL_PATH+_P+'data'};
L+U+=SET{WC.ORG='/var/lib/mysql'};
L+=SET{WC.SERVICE='mysql'};
L+W+=IF{_DB_SOFT='MYSQL56'}SET{WC.SERVICE='mysql56'};
O+=SET{WC.ORG=$WC.PATH_DAT1};本番分*
P+=SET{WC.ORG=$DATABASE_PATH,WC.BAK=$WC.PATH_DAT1_BAK};
P+=SET{WC.SERVICE='postgresql'};IF{_DB_SOFT='P83'}SET{WC.SERVICE='pgsql-'};
P+W+=SET{WC.SERVICE='postgresql-x64-'};IF{_DB_SOFT='P83'}SET{WC.SERVICE='pgsql-'};
P+W+=SET{WC.SERVICE+=_DB_SOFT[2;1]+'.'+_DB_SOFT[3;1]};
L+|P+W+=COMMAND{net stop ?WC.SERVICE?};
L+|P+U+=COMMAND{service  ?WC.SERVICE? stop};
M+=JUMP{SKIP};
D+=IF_FILE_NOT{?WC.ORG_FILE?}JUMP{SKIP};ファイル無はコピーせず。*
=IF_ERROR_DIR{?WC.ORG?}ERROR{NOT FOUND DIR(?WC.ORG?)};
P+=IF_ERROR_DIR{?WC.BAK?}ERROR{NOT FOUND DIR(?WC.BAK?)};
=SET{WC.OLD=_OS_DRIVE+_P+'I'+_P+'DATABASE_DAT_'+_DB+'.OLD.'+WC.TODAY_TIME};
=IF_ERROR_DIR{?WC.OLD?}JUMP{NOT_FOUND};
=ERROR{FOUND DIR(?WC.OLD?)};
=NOT_FOUND:MAKE_DIR{?WC.OLD?};
D-=SET{WC.COMMAND='?WC.COPY_DIR? ?WC.DQ??WC.ORG??WC.COPY_DIR_P??WC.DQ? ?WC.DQ??WC.OLD??WC.DQ?'};
D+=SET{WC.COMMAND='?WC.COPY_FILE? ?WC.ORG_FILE? ?WC.OLD?'};
=SKIP:
U+D+=SET{WC.USER_SU='firebird'};
U+I+=SET{WC.USER_SU='db2inst1'};
U+L+=SET{WC.USER_SU='mysql'};
U+O+=SET{WC.USER_SU='oracle'};
U+P+=SET{WC.USER_SU='postgres'};
NAME=COMMAND
=WRITE_OPEN{1,?_TMP??WC.FILE?_BACK.BAT,OT,/};
=SET{WC.COMMAND+=' 2>>?_TMP??WC.FILE?.TMP'};
=WRTE{1,WC.COMMAND};
=WRTE_CLOSE{W1};
W+=COMMAND{?_TMP??WC.FILE?_BACK.BAT};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_BACK.BAT};
U+=COMMAND{su -c ?_TMP??WC.FILE?_BACK.BAT ?WC.USER_SU?};
NAME=
O+=SET{WC.ORG=$WC.PATH_DAT2};テスト分*
O+=SET{WC.COMMAND='?WC.COPY_DIR? ?WC.DQ??WC.ORG??WC.COPY_DIR_P??WC.DQ? ?WC.DQ??WC.OLD??WC.DQ?'};
O+COPY=COMMAND
O+=SPLIT_CHAR{WC.SPLIT_O}{INSTALL_PATH}{_P};
O+W+=SET{WC.O4=WC.SPLIT_O4+_P};
O+U+=SET{WC.O4=};
O+=SET{WC.ORG=WC.SPLIT_O1+_P+WC.SPLIT_O2+_P+WC.SPLIT_O3+_P+WC.O4+'oradata'+_P+_INSTANCE};RDBMS分*
O+=SET{WC.COMMAND='?WC.COPY_DIR? ?WC.DQ??WC.ORG??WC.COPY_DIR_P??WC.DQ? ?WC.DQ??WC.OLD??WC.DQ?'};
O+COPY=COMMAND
U+=COMMAND{chgrp i_group ?WC.OLD?};
NAME=MSG_SET
=SET{W0.MSG=0};
=READ_OPEN{1,?_TMP??WC.FILE?.TMP,/};
=READ_NEXT_R1:READ_NEXT{1,}JUMP{READ_END_R1};
=IF{_READ_DATA=,='*'}BACK{READ_NEXT_R1};
I+=IF{_READ_DATA/'SQL1032N  start database manager'}READ_CLOSE{1}ERROR{サービスが起動していない可能性が有ります。起動してから続行して下さい。};
=COMPUTE{W0.MSG+=1};
=SPLIT_FORM{WN.SPLIT.}{?_READ_DATA?}{80};
=SET{WN.MSG?W0.MSG?=WN.SPLIT.1};
=BACK{READ_NEXT_R1};
=READ_END_R1:READ_CLOSE{1};
NAME=
=IF{W0.MSG=0}SET{YES2='YES'}EXIT3{YES2};
REPEAT=3
FORM=@
DATA={O}WN.MSG##{80};
REPEAT=
FORM= @ (バックアップにエラーが有ります、内容を確認し問題無ければYESで続行して下さい )
DATA=YES2{4}{YES,NO} 
=IF{_DATA!='YES'}EXIT{YES2};
=WRITE_OPEN{1,?_TMP??WC.FILE?.TMP,OT,/};WRTE_CLOSE{W1};
U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TMP};
*=====( BAK==>ORG 復元処理 )=======================================================
******( (P) DIR BAK==>ORG PostgreSQLは全ファイルを戻す)***************************
P+=SET{WC.COMMAND='?WC.COPY_DIR? ?WC.DQ??WC.BAK??WC.COPY_DIR_P??WC.DQ? ?WC.DQ??WC.ORG??WC.DQ?'};
P+=READ_OPEN{1,?_TMP??WC.FILE?.TMP,/};
P+=READ_NEXT{1,}READ_CLOSE{1}JUMP{};
P+=READ_CLOSE{1}ERROR{?_READ_DATA?};
P+U+=COMMAND{chown postgres ?WC.ORG?};COMMAND{chgrp postgres ?WC.ORG?};
=SKIP:
******( （O) BAK==>ORG Oracleはエラーのデータベースファイルのみ戻す)******
O+=IF{WC.DB_FULL_FILE_OK!='OK'}JUMP{SKIP};
O+=SET{WC.ORG=WC.DB_FULL_FILE,WC.BAK=WC.DB_FULL_FILE_BAK};
O+=IF_ERROR_COPY_FILE{?WC.ORG?,?WC.BAK?}JUMP{ERR_COPY};
O+=SET{WC.DB_FULL_FILE_COPY='OK',WC.DB_FULL_FILE_COPY@COLOR='B'};
O+=JUMP{SKIP};
O+=ERR_COPY:SET{WC.DB_FULL_FILE_COPY='BAD',DB_FULL_FILE_COPY@COLOR='R'};
O+=ERROR{データベースファイルを戻せません};
O+=SKIP:
O+REPEAT=
O+=SKIP2:
O+=WRITE_OPEN{1,?_TMP??WC.FILE?.TMP,OT,/};WRTE_CLOSE{W1};
O+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TMP};
O+=WRITE_OPEN{1,?_TMP??WC.FILE?.TXT,OT,/};
O+=WRTE{1,'SHUTDOWN IMMEDIATE'};
O+=WRTE{1,'STARTUP MOUNT'};
O+=WRTE{1,'RECOVER DATAFILE ''?WC.ORG?'''};
O+=WRTE{1,'ALTER DATABASE OPEN;'};
O+=IF{_DB_SOFT[1;3]>'O11'}WRTE{1,'ALTER PLUGGABLE DATABASE PDBORCL OPEN;'};
O+=WRTE{1,'EXIT'};
O+=WRTE_CLOSE{W1};
O+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?.TXT};
O+W+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};
O+U+=COMMAND{su - -c ?_TMP??WC.FILE?_RDBMS.BAT oracle};
O+COPY=ORACLE_CHECK
O+=IF{WC.DB_FULL_FILE_OK=}EXIT{};
O+=IF{WC.DB_FULL_FILE_OK='OK'}ERROR{まだ、エラーが有ります。YESで続行して下さい。};
O+=IF{WC.DB_FULL_FILE_OK!='OK'}ERROR{?_READ_DATA?};
******( （D) Firebird はフィルを消してからコマンドで復元 )*****
D+=COMMAND{?WC.ERASE? ?WC.ORG_FILE?};   
D+=IF_FILE{?WC.ORG_FILE?}ERROR{データベースを消せません。};   
D+=SET{WC.CMD=$WC.DQ+$INSTALL_PATH+_P+'bin'+_P+'gbak'+$WC.DQ};
D+=NOP{COMMAND/?WC.CMD? -c -user ?LOGIN_ID? -password *** ?WC.BAK_FILE? ?WC.ORG_FILE? 2>> ?_TMP??WC.FILE?.TMP};   
D+=WRITE_OPEN{1,?_TMP??WC.FILE?_RDBMS.BAT,OT,/};
D+W+=WRTE{1,'@ECHO OFF'};   
D+=SET{_TRACE=0};
D+=WRTE{1,'?WC.CMD? -c -user ?LOGIN_ID? -password ?PASSWORD_ADMIN? ?WC.BAK_FILE? ?WC.ORG_FILE? 2>> ?_TMP??WC.FILE?.TMP'};   
D+=SET{_TRACE=$WC.TRACE};
D+=WRTE_CLOSE{W1};
D+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_RDBMS.BAT};
D+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};   
D+=ERASE_FILE{   ?WC.FILE?_RDBMS.BAT};   
L+=READ_OPEN{1,?WC.PATH_DAT1_BAK??_P?BACKUP_DAT};
L+=READ_NEXT_R1:READ_NEXT{1,}JUMP{READ_END_R1};
L+=IF{_READ_DATA!/'-- CHANGE MASTER TO MASTER_LOG_FILE='}BACK{READ_NEXT_R1};
L+=READ_CLOSE{1};
L+=SPLIT_CHAR{WC.SPLIT.}{_READ_DATA}{'=;'};
L+=IF{_SPLIT_CHAR_COUNT<3}ERROR{'MASTER_LOG_POS=' ERROR};
L+=SET{WC.START_POSITION='--start-position='+WC.SPLIT.3};
L+=JUMP{SKIP};
L+=READ_END_R1:READ_CLOSE{1};ERROR{'CHANGE MASTER TO MASTER_LOG_FILE=' NOT FOUND};
L+=SKIP:
L+=ERASE_FILE{?WC.FILE?.TMP}
L+=ERASE_FILE{?WC.FILE?.LOG}
L+=DIR{?WC.PATH_LOG1_BAK?};SET{WC.REDIRECT='>'};
L+=DIR_NEXT:DIR_NEXT{WC.DATA}JUMP{DIR_END};
L+=IF{WC.DATA%'.index',%'.state'}BACK{DIR_NEXT};
L+W+=SET{WC.CMD=$WC.DQ+$INSTALL_PATH+_P+'bin'+_P+'mysqlbinlog'+$WC.DQ};
L+U+=SET{WC.CMD='mysqlbinlog'};
L+=NOP{COMMAND/?WC.CMD? -u?LOGIN_ID? -p*** ?WC.START_POSITION? ?WC.PATH_LOG1_BAK??_P??WC.DATA? >> ?_TMP??WC.FILE?.LOG 2>>?_TMP??WC.FILE?.TMP}; 
L+=WRITE_OPEN{1,?_TMP??WC.FILE?_RDBMS.BAT,OT,/};
L+W+=WRTE{1,'@ECHO OFF'};   
L+=SET{_TRACE=0};
L+=WRTE{1,'?WC.CMD? -u?LOGIN_ID? -p?PASSWORD_ADMIN? ?WC.START_POSITION? ?WC.PATH_LOG1_BAK??_P??WC.DATA? >> ?_TMP??WC.FILE?.LOG 2>>?_TMP??WC.FILE?.TMP'}; 
L+=SET{_TRACE=$WC.TRACE};
L+=WRTE_CLOSE{W1};
L+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_RDBMS.BAT};
L+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};   
L+=ERASE_FILE{          ?WC.FILE?_RDBMS.BAT};   
L+=SET{WC.REDIRECT='>>'};
L+=SET{WC.START_POSITION=};
L+=BACK{DIR_NEXT};
L+=DIR_END:
L+W+=SET{WC.CMD=$WC.DQ+$INSTALL_PATH+_P+'bin'+_P+'mysql'+$WC.DQ};
L+U+=SET{WC.CMD='mysql'};
L+=NOP{COMMAND/?WC.CMD? -u?LOGIN_ID? -p*** --default-character-set=utf8mb4 < ?WC.BAK_FILE? 2>> ?_TMP??WC.FILE?.TMP}; 
L+=NOP{COMMAND/?WC.CMD? -u?LOGIN_ID? -p*** --default-character-set=utf8mb4 < ?_TMP??WC.FILE?.LOG                 2>> ?_TMP??WC.FILE?.TMP}; 
L+=WRITE_OPEN{1,?_TMP??WC.FILE?_RDBMS.BAT,OT,/};
L+W+=WRTE{1,'@ECHO OFF'};   
L+W+=WRTE{1,'ECHO この処理は時間が掛かります、しばらくお待ちください。'};   
L+=SET{_TRACE=0};
L+=WRTE{1,'?WC.CMD? -u?LOGIN_ID? -p?PASSWORD_ADMIN? --default-character-set=utf8mb4 < ?WC.BAK_FILE? 2>> ?_TMP??WC.FILE?.TMP'}; 
L+=WRTE{1,'?WC.CMD? -u?LOGIN_ID? -p?PASSWORD_ADMIN? --default-character-set=utf8mb4 < ?_TMP??WC.FILE?.LOG                 2>> ?_TMP??WC.FILE?.TMP'}; 
L+=SET{_TRACE=$WC.TRACE};
L+=WRTE_CLOSE{W1};
L+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_RDBMS.BAT};
L+W+=COMMAND{net start ?WC.SERVICE?};
L+U+=COMMAND{service   ?WC.SERVICE? start}
L+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};   
L+=ERASE_FILE{           ?WC.FILE?_RDBMS.BAT};   
P+=WRITE_OPEN{1,?DATABASE_PATH??_P?recovery.conf,OT,/};
P+W+=WRTE{1,'restore_command = ''COPY "?WC.PATH_LOG1_BAK_YEN2??_P??_P?%f" "%p"'''};
P+U+=WRTE{1,'restore_command = ''cp    ?WC.PATH_LOG1_BAK??_P?%f   %p'''};
P+=WRTE_CLOSE{W1};
P+W+=COMMAND{net start ?WC.SERVICE?};
P+U+=COMMAND{service   ?WC.SERVICE? start};
I+=WRITE_OPEN{1,?_TMP??WC.FILE?.TXT,OT,/};
I+=WRTE{1,'FORCE APPLICATIONS ALL'};
I+=WRTE{1,'DEACTIVATE DATABASE I_?_SYSTEM?'};
I+=WRTE{1,'RESTORE DATABASE I_?_SYSTEM?  REBUILD WITH ALL TABLESPACES IN DATABASE FROM ?WC.PATH_DAT1_BAK? WITHOUT PROMPTING'};
I+=WRTE{1,'ROLLFORWARD DATABASE I_?_SYSTEM? TO END OF LOGS AND STOP'};
I+=WRTE_CLOSE{W1};
I+W+=SET{WC.DB2='DB2CMD -I -C -W DB2',WC.DB2_END=};
I+U+=SET{WC.DB2='su - -c "db2',WC.DB2_END='" db2inst1'};
I+=WRITE_OPEN{1,?_TMP??WC.FILE?_RDBMS.BAT,OT,/};
I+=WRTE{1,'?WC.DB2? -f ?_TMP??WC.FILE?.TXT >> ?_TMP??WC.FILE?.TMP 2>&1 ?WC.DB2_END?'};
I+=WRTE_CLOSE{1};
I+U+=COMMAND{chmod 777 ?_TMP??WC.FILE?_RDBMS.BAT};
I+=COMMAND{?_TMP??WC.FILE?_RDBMS.BAT};
COPY=MSG_SET
*****************************************************************************************
PROGRAM=NOT
BEGIN
=SET{_TITLE='RESCURE 4'};
FORM= (復元結果確認)
REPEAT=$W0.MSG
0+FORM=復元しました。エラーは有りません！
0-FORM=@
0-DATA={O}$WN.MSG##{80}
REPEAT=
FORM=END @ {YES}
DATA=END{4}{YES,}
=IF{_DATA='YES'}EXIT{0};
=EXIT{END};
%RESCUE_M+COMMENT_END
****************************************************************************
************( RESCUE_M M ONLY 1/3 )*****************************************
*****************************************************************************
%RESCUE_M-COMMENT_BEGIN
PROGRAM=OUTPUT
CONTROL=ERROR,SQL_LOGIN,0,SCROLL
BEGIN
=SET{_TITLE='復元処理(0の選択で復元実行)'};
COLOR
=IF{OK='0'} SET{STATE@COLOR='R'};
=IF{STATE1/'NONE'}SET{STATE1@COLOR='R'};
=IF{STATE2/'NONE'}SET{STATE2@COLOR='R'};
SET={N}DUMMY{1}
=SET{_TRACE=0};
=SET{WC.DAT.LOG1='DAT',WC.DAT.LOG2='LOG'};
=LOGIN_SQL{UPDATE WORK_TABLEA SET STATE='NONE',OK=0,FILE_NAME1=' ',FILE_NAME2=' '}; 
=LOGIN_SQL{UPDATE WORK_TABLEA SET STATE='FIND',OK=1 
=   WHERE NAME IN(SELECT name from master.sys.syslogins) AND KIND='LOGIN'}; 
REPEAT=2
=LOGIN_SQL{UPDATE X1 SET FILE_NAME##=X3.filename  
=   FROM WORK_TABLEA X1,master.sys.databases X2,master.sys.sysaltfiles X3
=   WHERE X2.name=X1.NAME AND X3.dbid=X2.database_id AND KIND='DATABASE' AND X3.name='?WC.DAT.LOG##?'}; 
REPEAT=
=LOGIN_SQL{UPDATE X1 SET STATE=CASE X2.state WHEN 0 THEN 'FIND' WHEN 3 THEN 'RECOVERY' WHEN '6' THEN 'OFFLINE' ELSE '?_Q?' END
= ,OK=CASE X2.state WHEN 0 THEN 1 ELSE 0 END  
= FROM WORK_TABLEA X1,master.sys.databases X2 WHERE X2.name=X1.NAME AND KIND='DATABASE'}; 
=LOGIN_SQL{UPDATE WORK_TABLEA SET STATE='FIND',OK=1,FILE_NAME1=phyname 
=   FROM WORK_TABLEA X1,master.sys.sysdevices X2 WHERE X2.name=X1.NAME AND KIND IN('BACKUP_DAT','BACKUP_LOG')}; 
=LOGIN_SQL1{SELECT KIND,OK,NAME,STATE,STATE1,STATE2,DRIVE1,DRIVE2,FILE_NAME1,FILE_NAME2 FROM WORK_TABLEA WHERE KIND IN('DATABASE','BACKUP_DAT','BACKUP_LOG')};
=SQL1_NEXT:SQL1_NEXT{WC.KIND,W0.OK,WC.NAME,WC.STATE,WC.STATE1,WC.STATE2,WC.DRIVE1,WC.DRIVE2,WC.FILE_NAME1,WC.FILE_NAME2}JUMP{SQL1_END};
=SET{WC.DATABASE_LOG_SW=0};
REPEAT=2 (## DAT,LOG)
=SET{WC.FILE_SW=0};
=IF{WC.FILE_NAME##!=}JUMP{FILE_CHECK};
2+=IF{WC.KIND!='DATABASE'}JUMP{SKIP};
=SET{WC.FILE_SW=1};
=IF{WC.KIND='DATABASE'}
1+=   SET{WC.FILE_NAME1='?WC.DRIVE1?:\I\DATABASE_DAT_M\?WC.NAME?_DAT.MDF'};
2+=   SET{WC.FILE_NAME2='?WC.DRIVE2?:\I\DATABASE_LOG_M\?WC.NAME?_LOG.LDF'};
=IF{WC.KIND/'BACKUP_'}
=   SET{WC.FILE_NAME1='?WC.DRIVE1?:\I\?WC.KIND?_M\?WC.NAME[1;WC.NAME@LENGTH-4]?.?WC.KIND[8]?'};
=FILE_CHECK:
=SET{_FIND_CHAR_LAST=WC.FILE_NAME##+_P};
=IF_ERROR_DIR{?WC.FILE_NAME##[1;_FIND_CHAR_LAST]?}SET{W0.OK=0,WC.STATE##='NONE_DIR'}JUMP{OK};
=IF{WC.KIND='BACKUP_LOG'}SET{WC.STATE##='DIR'}JUMP{OK};
=DIR_NEXT:DIR_NEXT{WC.DIR}JUMP{DIR_END};
=IF{'?_P??WC.DIR?'!=WC.FILE_NAME##[_FIND_CHAR_LAST]}BACK{DIR_NEXT};
=SET{WC.STATE##='FILE'};
=JUMP{OK};
=DIR_END:
=IF{WC.KIND='BACKUP_DAT'}SET{WC.STATE##='DIR'}JUMP{OK};
2+=IF{WC.DATABASE_LOG_SW=1,WC.KIND!='DATABASE',WC.FILE_SW=0}JUMP{NONE_FILE};
2+=SET{WC.DATABASE_LOG_SW=1}
2+=SET{WC.FILE_NAME2='?WC.DRIVE1?:\I\DATABASE_DAT_M\?WC.NAME?_DAT_log.ldf'};データベース用ディレクトリで再確認*
2+=BACK{FILE_CHECK};
=NONE_FILE:
=SET{WC.STATE##='NONE_FILE',W0.OK=0};
=OK: 
=SKIP:
REPEAT=
=LOGIN_SQL{UPDATE WORK_TABLEA SET ?_VRE&W0.OK?,?_VRE&WC.STATE1?,?_VRE&WC.STATE2?,?_VRE&WC.FILE_NAME1?,?_VRE&WC.FILE_NAME2?
=   WHERE ?_VRE&WC.NAME? AND ?_VRE&WC.KIND?};
=BACK{SQL1_NEXT};
=SQL1_END:
=LOGIN_SQL{UPDATE WORK_TABLEA SET STATE='DETACH' WHERE KIND='DATABASE' AND STATE='NONE' AND STATE1='FILE'};
=SET{WC.DATABASE_CHECK_SW=0,WC.NONE_DIR_CHECK_SW=0};
*****( START )************************
START
=SET{WC.SW=0,%OFFLINE='-',%RECOVERY='-',%DETACH='-'};
=SET{%NONE='-',%NONE_DIR='-',%LOGIN='-',%LOGIN1='-',%LOGIN2='-',%LOGIN3='-'};
=SET{%RECOVERY_LOG='-',%RECOVERY_DAT='-'};
=LOGIN_SQL_SET{W0}{SELECT COUNT(*) FROM WORK_TABLEA WHERE KIND LIKE 'BACKUP%' AND STATE='NONE'};
=IF{W0>0}SET{%NONE='+',WC.SW=1};
=IF{STATE='OFFLINE',='DETACH'}SET{%?STATE?='+'}EXIT{};
=IF{STATE!='RECOVERY'}JUMP{SKIP};
=READ_OPEN{1,?WC.LOG_FILE?,/};
=READ_NEXT_R1:READ_NEXT{1,}SET{%RECOVERY_DAT='+'}JUMP{READ_END_R1};
=SET{_FIND_STRING=_READ_DATA+'?FILE_NAME2?'};
=IF{_FIND_STRING=0}BACK{READ_NEXT_R1};
=READ_CLOSE{1};
=SET{%RECOVERY_LOG='+'};
=READ_END_R1:READ_CLOSE{1};
=LOGIN_SQL_SET{WC.STATE,WC.STATE1}{SELECT STATE,STATE1 FROM WORK_TABLEA WHERE KIND='BACKUP_DAT' AND NAME='?NAME?_DAT'};
=IF{_SQL_SET_COUNT=0}ERROR{該当BACKUP_DATの情報が無いので処理を続行できません。};
=IF{WC.STATE1!='FILE'}ERROR{該当BACKUP_DATのファイルが存在しないので処理を続行できません。};
=IF{MW_RTL=2}JUMP{LOG_SKIP};
=LOGIN_SQL_SET{WC.STATE,WC.STATE1}{SELECT STATE,STATE1 FROM WORK_TABLEA WHERE KIND='BACKUP_LOG' AND NAME='?NAME?_LOG'};
=IF{_SQL_SET_COUNT=0}ERROR{該当BACKUP_LOGの情報が無いので処理を続行できません。};
=IF{WC.STATE1!='DIR'}ERROR{該当BACKUP_LOGのディレクトリが存在しないので処理を続行できません。};
=LOG_SKIP:
=SET{%?STATE?='+'}
=EXIT{};
=SKIP:IF{WC.DATABASE_CHECK_SW=1}ERROR{STATE=('OFFLINE','RECOVERY','DETACH') FOUND};
=LOGIN_SQL_SET{WC.NAME}{SELECT NAME FROM WORK_TABLEA WHERE KIND LIKE 'DATABASE' AND STATE='NONE'};
=IF{_SQL_SET_COUNT>0}ERROR{復元出来ないデータベース(?WC.NAME?)が有り、続行できません。};
=IF{WC.NONE_DIR_CHECK_SW=1}SET{%NONE_DIR='+',WC.SW=1};
REPEAT=3 (## R,T,L)
=LOGIN_SQL_SET{W0}{SELECT COUNT(*) FROM WORK_TABLEA WHERE KIND='LOGIN' AND STATE='NONE' AND MW_RTL=##};
=IF{W0>0}SET{%LOGIN##='+',%LOGIN='+',WC.SW=1};
=IF{WC.SW=0}ERROR{全て正常で、復元対象はありません。};
REPEAT=
=SET{_TRACE=$WC.TRACE};
DATA={N}OK{1}
DATA={N}MW_RTL{1}
DATA=KIND{10}
DATA=NAME{23}
DATA=STATE{8}
DATA=STATE1{9}
DATA=STATE2{9}
DATA=FILE_NAME1{53}
DATA=FILE_NAME2{57}
REPEAT=_SELECT_COUNT
SQL=?_SELECT##?
REPEAT=
SQL= FROM WORK_TABLEA ?_T? ORDER BY OK,KIND,NAME
=IF{STATE='OFFLINE',='RECOVERY',='DETACH'}SET{WC.DATABASE_CHECK_SW=1};
=IF{'NONE_DIR'=STATE1,=STATE2}SET{WC.NONE_DIR_CHECK_SW=1};
*****************( )************************************************
PROGRAM=NOT
BEGIN
=SET{_TITLE='復元処理'};
FORM= @
DATA={O}COMMENT{75}
%NONE_DIR+=EXIT3{WAIT};
*=========( NONE_DIR )=====================================
%NONE_DIR-COMMENT_BEGIN
FORM= @
DATA=WAIT{1}
FORM= ディレクトリを作ります。
=LOGIN_SQL1{SELECT KIND,NAME,DRIVE1,DRIVE2,FILE_NAME1,FILE_NAME2 FROM WORK_TABLEA WHERE STATE1='NONE_DIR' OR STATE2='NONE_DIR' ORDER BY 1,2};
=SQL1_NEXT:SQL1_NEXT{WC.KIND,WC.NAME,WC.DRIVE1,WC.DRIVE2,WC.FILE_NAME1,WC.FILE_NAME2}JUMP{SQL1_END};
REPEAT=2 (## 1,2)
=IF{DRIVE##=}JUMP{SKIP};
=IF_ERROR_DIR{?WC.DRIVE##?:\}ERROR{ライブ(?WC.DRIVE##?)が有りません,ドライブを有効にして続行して下さい。'};
=SET{WC.DIR='?WC.DRIVE##?:\I'};
NAME=MAKE_DIR
=IF_ERROR_DIR{?WC.DIR?}
=   IF_ERROR_MAKE_DIR{??WC.DIR?}ERROR{(?WC.DIR?)作れません,作れるようにしてから続行して下さい。'};
NAME=
=SET{WC.DIR+='\?WC.KIND?'};
1+=IF{KIND='DATABASE'}SET{WC.DIR+='_DAT_M'};
2+=IF{KIND='DATABASE'}SET{WC.DIR+='_LOG_M'};
=IF{KIND!='DATABASE'}SET{WC.DIR+='_M'};
COPY=MAKE_DIR
=SKIP:
PETEAT=
=BACK{SQL1_NEXT};
=SQL1_END:
%NONE_DIR-COMMENT_END
*==========================================================
%DETACH+=SET{COMMENT='YESで全未定義データベースのアタッチを実行します。'};
%OFFLINE+=SET{COMMENT='YESで全オフラインデータベースをオンライン化します。'};
%LOGIN+=SET{COMMENT='LOGIN IDを設定します。'};
%LOGIN+=SPLIT_CHAR{WC.SPLIT}{NAME}{'_'};
REPEAT=3 REAL,TEST,LINK
%LOGIN##+FORM= PASSWORD (?WN.REAL.TEST.LINK##?) @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ 
%LOGIN##+DATA=PASSWORD##  {?W0.PWD_LEN?,?W0.PWD?,?WC.PWD_TYPE1?,*}
%LOGIN##+DATA=PASSWORD##_2{?W0.PWD_LEN?,?W0.PWD?,?WC.PWD_TYPE1?,*}
%LOGIN##+=SET{_TRACE=0};
%LOGIN##+=IF{_DATA!=PASSWORD##}ERROR{NOT SAME};
%LOGIN##+=SET{_TRACE=$WC.TRACE};
REPEAT=
FORM= @@@@ {YES,NO}
DATA=YES{4}{YES,NO}　(★YESで復元を開始します。）
=IF{_DATA!='YES'}EXIT{_END};
*===============( BACKUP_... )=========================
*===============( NONE,OFFLINE )=========================
%NONE-%DETACH-%OFFLINE-COMMENT_BEGIN
=LOGIN_SQL1{SELECT KIND,NAME,STATE,FILE_NAME1,FILE_NAME2 FROM WORK_TABLEA WHERE STATE='?STATE?' ORDER BY 1,2};
=SQL1_NEXT:SQL1_NEXT{WC.KIND,WC.NAME,WC.STATE,WC.FILE_NAME1,WC.FILE_NAME2}JUMP{SQL1_END};
%NONE+=IF{WC.KIND/'BACKUP_'}
%NONE+=  IF_ERROR_LOGIN_SQL{EXEC SP_ADDUMPDEVICE 'DISK','?WC.NAME?','?WC.FILE_NAME1?'}
%NONE+=    IF{_DB_I_ERROR!='EXIST'}ERROR{};
%OFFLINE+=IF{WC.STATE='OFFLINE'}IF_ERROR_LOGIN_SQL{ALTER DATABASE ?WC.NAME? SET ONLINE}ERROR{};
%DETACH+=IF{WC.STATE!='DETACH'}JUMP{SKIP};
%DETACH+REPEAT=2 DAT,LOD
%DETACH+=COMMAND{ICACLS ?WC.FILE_NAME##? /grant:r everyone:(OI)(CI)(F)};
%DETACH+REPEAT=
%DETACH+=IF_ERROR_LOGIN_SQL{CREATE DATABASE ?WC.NAME? 
%DETACH+=   ON (FILENAME='?WC.FILE_NAME1?')
***%DETACH+=     ,(FILENAME='?WC.FILE_NAME2?')
%DETACH+=    FOR ATTACH}ERROR{};
%DETACH+REPEAT=2 DAT,LOD
%DETACH+=COMMAND{ICACLS ?WC.FILE_NAME##? /remove EVERYONE /grant:r administrators:(OI)(CI)(F)};
%DETACH+REPEAT=
%DETACH+=SKIP:
=BACK{SQL1_NEXT};
=SQL1_END:
%NONE-%DETACH-%OFFLINE-COMMENT_END
*===============( DATABASE_LOG )===========================
%RECOVERY_LOG+=IF_ERROR_LOGIN_SQL{ALTER DATABASE ?NAME? SET EMERGENCY}ERROR{}; 
%RECOVERY_LOG+=IF_ERROR_LOGIN_SQL{ALTER DATABASE ?NAME? SET SINGLE_USER}ERROR{}; 
%RECOVERY_LOG+=IF_ERROR_LOGIN_SQL{DBCC  CHECKDB (?NAME?,REPAIR_ALLOW_DATA_LOSS)}ERROR{}; 
%RECOVERY_LOG+=IF_ERROR_LOGIN_SQL{ALTER DATABASE ?NAME? SET MULTI_USER}ERROR{}; 
*********( BACKUP LOG )*****************************************************************
%RECOVERY_DAT+=SET{WC.NORECOVERY=};
%RECOVERY_DAT+=IF{$MW_RTL=2}SET{BACKUP_LOG='SKIP'}JUMP{BACKUP_LOG_SKIP};
%RECOVERY_DAT+=IF_ERROR_LOGIN_SQL{BACKUP LOG ?NAME? TO ?NAME?_LOG WITH INIT,NO_TRUNCATE}JUMP{ERR_LOG};
%RECOVERY_DAT+=SET{BACKUP_LOG='OK',BACKUP_LOG@COLOR='B',WC.NORECOVERY='WITH NORECOVERY'};JUMP{BACKUP_LOG_SKIP};
%RECOVERY_DAT+=ERR_LOG:IF_ERROR_SET{BACKUP_LOG_ERROR=_ERROR+_DB_ERROR}NOP{};
%RECOVERY_DAT+=SET{BACKUP_LOG='BAD',BACKUP_LOG@COLOR='R'};
%RECOVERY_DAT+=BACKUP_LOG_SKIP:
*********( RESTORE DATABASE )***********************************************************
%RECOVERY_DAT+=IF_ERROR_LOGIN_SQL{RESTORE DATABASE ?NAME? FROM ?NAME?_DAT ?WC.NORECOVERY?}JUMP{ERR_DAT};
%RECOVERY_DAT+=SET{RESTORE_DAT='OK',RESTORE_DAT@COLOR='B'};
%RECOVERY_DAT+=IF{BACKUP_LOG!='OK'}SET{RESTORE_LOG='SKIP'}JUMP{SKIP};
*********( RESTORE LOG )*****************************************************************
%RECOVERY_DAT+=IF_ERROR_LOGIN_SQL{RESTORE LOG ?NAME? FROM ?NAME?_LOG}JUMP{ERR_LOG};
%RECOVERY_DAT+=SET{RESTORE_LOG='OK',RESTORE_LOG@COLOR='B'};
%RECOVERY_DAT+=JUMP{SKIP};
%RECOVERY_DAT+=ERR_DAT:IF_ERROR_SET{RESTORE_DAT_ERROR=_ERROR+_DB_ERROR}NOP{};    
%RECOVERY_DAT+=SET{RESTORE_DAT='BAD',RESTORE_DAT@COLOR='R'};
%RECOVERY_DAT+=JUMP{SKIP};
%RECOVERY_DAT+=ERR_LOG:IF_ERROR_SET{RESTORE_LOG_ERROR=_ERROR+_DB_ERROR}NOP{};    
%RECOVERY_DAT+=SET{RESTORE_LOG##='BAD',RESTORE_LOG##@COLOR='R'};
%RECOVERY_DAT+=SKIP:
*===============( LOGIN )=========================
%LOGIN-COMMENT2_BEGIN
REPEAT0=3 ($$ REAL,TEST,LINK)
REPEAT=$W0.PERMISSION (##)
=SET{W0.REPEAT2=1};
$3-REPEAT2=3 (D,I,O)
$3-%LOGIN$$+=SET{WC.D.I.O.L=$WC.D.I.O.L?W0.REPEAT2?};
$3-%LOGIN$$+=NOP{EXEC SP_ADDLOGIN '?WC.I_SYSTEM??WC.R.T$$?_?WC.D.I.O.L?_?WC.PERMISSION##?'
$3-%LOGIN$$+=   ,'XXX','?WC.I_SYSTEM??WC.R.T$$?_M_?WC.PERMISSION$$?'};
$3-%LOGIN$$+=SET{_TRACE=0};
$3-%LOGIN$$+=IF_ERROR_LOGIN_SQL{EXEC SP_ADDLOGIN '?WC.I_SYSTEM??WC.R.T$$?_?WC.D.I.O.L?_?WC.PERMISSION##?'
$3-%LOGIN$$+=                    ,'?PASSWORD$$?','?WC.I_SYSTEM??WC.R.T$$?_M_?WC.PERMISSION##?'}
$3-%LOGIN$$+=   IF{_DB_I_ERROR!='EXIST'}ERROR{?_ERROR?};
$3+REPEAT2=2 R,T
$3+%LOGIN$$+=SET{WC.R.T=$WC.R.T?W0.REPEAT2?};
$3+%LOGIN$$+=NOP{EXEC SP_ADDLOGIN '?WC.I_SYSTEM??WC.R.T?_L_?WC.PERMISSION##?'
$3+%LOGIN$$+=              ,'XXX','?WC.I_SYSTEM??WC.R.T?_M_?WC.PERMISSION##?'};
$3+%LOGIN$$+=SET{_TRACE=0};
$3+%LOGIN$$+=IF_ERROR_LOGIN_SQL{EXEC SP_ADDLOGIN '?WC.I_SYSTEM??WC.R.T?_L_?WC.PERMISSION##?'
$3+%LOGIN$$+=                    ,'?PASSWORD$$?','?WC.I_SYSTEM??WC.R.T?_M_?WC.PERMISSION##?'}
$3+%LOGIN$$+=   IF{_DB_I_ERROR!='EXIST'}ERROR{?_ERROR?};
%LOGIN$$+=COMPUTE{W0.REPEAT2+=1};
%LOGIN$$+=SET{_TRACE=$WC.TRACE};
REPEAT=
REPEAT0=$W0.PERMISSION ($$)
REPEAT=$W0.PERMISSION (##)
=SET{W0.REPEAT2=1};
***** ( (M) D,I,O,L)************************************************************
=REPEAT2:
=SET{WC.D.I.O.L=$WC.D.I.O.L?W0.REPEAT2?};
=SET{WC.USER='?WC.I_SYSTEM?R_?WC.D.I.O.L?_?WC.PERMISSION$$?'};
=SET{WC.R.T='R'};
=SET{WC.M.W='M'};
NAME=ALTER_USER_$$_##
=IF_ERROR_LOGIN_SQL{USE ?WC.I_SYSTEM??WC.R.T?_?WC.M.W?_?WC.PERMISSION##?
=   ALTER USER ?WC.USER? WITH LOGIN=?WC.USER?,DEFAULT_SCHEMA=DBO}ERROR{};
NAME=
=SET{WC.M.W='W'};
COPY=ALTER_USER_$$_##
=SET{WC.R.T='T'};
COPY=ALTER_USER_$$_##
=SET{WC.M.W='M'};
COPY=ALTER_USER_$$_##
=SET{WC.USER='?WC.I_SYSTEM?T_?WC.D.I.O.L?_?WC.PERMISSION$$?'};
COPY=ALTER_USER_$$_##
=SET{WC.M.W='W'};
COPY=ALTER_USER_$$_##
=IF{W0.REPEAT2<4}COMPUTE{W0.REPEAT2+=1}BACK{REPEAT2};
**********************************************
REPEAT0=$W0.PERMISSION ($$)
REPEAT=3 (WC.R.T.T##;WC.R.R.T##)
=SET{WC.PERX='ZZZZ'};
=SET{W0.REPEAT2=1};
********* (WC.PER--(ZZZZ;自分))*
=REPEAT2:
=IF{W0.REPEAT2=2}SET{WC.PERX=$WC.PERMISSION$$};
=SET{WC.USE='M',WC.USER='?WC.I_SYSTEM?R_D_ZZZZ'};
NAME=SP_ADDROLEMEMBER_$$_##
=LOGIN_SQL{USE ?WC.I_SYSTEM??WC.R.T.T##?_?WC.USE?_?WC.PERMISSION$$? 
=    EXEC SP_ADDROLEMEMBER 'DB_OWNER','?WC.USER?'};
NAME=
=SET{WC.USER='?WC.I_SYSTEM??WC.R.R.T##?_D_?WC.PERX?'};
COPY=SP_ADDROLEMEMBER_$$_##
=SET{WC.USE='W'};
COPY=SP_ADDROLEMEMBER_$$_##
=SET{WC.USER='?WC.I_SYSTEM??WC.R.R.T##?_I_?WC.PERX?'};
COPY=SP_ADDROLEMEMBER_$$_##
=SET{WC.USER='?WC.I_SYSTEM??WC.R.R.T##?_O_?WC.PERX?'};
COPY=SP_ADDROLEMEMBER_$$_##
=IF{$WC.PERMISSION$$='ZZZZ'}JUMP{SKIP};
=IF{W0.REPEAT2<2}COMPUTE{W0.REPEAT2+=1}BACK{REPEAT2}; 
=SKIP:
REPEAT0=
%LOGIN-COMMENT2_END
*===============( LOGIN )=========================
%RECOVERY_DAT+FORM=  BACKUP LOG @@@@ @
%RECOVERY_DAT+DATA={O}BACKUP_LOG{4} 
%RECOVERY_DAT+DATA={O}BACKUP_LOG_ERROR{70} 
%RECOVERY_DAT+FORM= RESTORE DAT @@@@ @
%RECOVERY_DAT+DATA={O}RESTORE_DAT{4} 
%RECOVERY_DAT+DATA={O}RESTORE_DAT_ERROR{70} 
%RECOVERY_DAT+FORM= RESTORE LOG @@@@ @
%RECOVERY_DAT+DATA={O}RESTORE_LOG{4} 
%RECOVERY_DAT+DATA={O}RESTORE_LOG_ERROR{70} 
%RECOVERY_DAT+FORM= END @
%RECOVERY_DAT+DATA=END{1} 
=EXIT{_END};
END
=LOGIN_SQL{USE master};
=SET{_RETURN_SQL=1};
%RESCUE_M-COMMENT_END
