?? dbautoback.ec
字號(hào):
/* dbautoback.ec 利用SMI表實(shí)現(xiàn)INFORMIX數(shù)據(jù)庫(kù)大批量自動(dòng)備份 */
/* 編譯方法:esql -o dbautoback dbautoback.ec */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
EXEC SQL include sqlca;
char *str_repl_char(char *,char,char);
main()
{
FILE *dbfile;
char dbname[19],shellCmd[250],pathStr[80];
EXEC SQL begin declare section;
char queryStr[250];
int mySID;
EXEC SQL end declare section;
sprintf(pathStr,"%s","/databk");
if ( (dbfile = fopen("/databk/backdbname.list","r")) == NULL)
{
printf("錯(cuò)誤:您尚未定義需要備份的數(shù)據(jù)庫(kù)清單文件(/databk/backdbname.list).\n");
exit(1);
}
EXEC SQL DataBase sysmaster;
while (fgets(dbname,sizeof(dbname),dbfile))
{
if (dbname[0] != '#') /* 若該行不是注釋行,則繼續(xù) */
{
str_repl_char(dbname,'\n',0); /* 將換行符去除 */
/* 檢查ONLINE中有否該名稱的數(shù)據(jù)庫(kù)存在 */
sprintf(queryStr,"%s%s%s","select * from sysdbspartn where name='",dbname,"'");
EXEC SQL Prepare pre_name From $queryStr;
EXEC SQL execute pre_name;
if (SQLCODE == SQLNOTFOUND)
printf("%s,沒(méi)有該數(shù)據(jù)庫(kù)\n",dbname);
else
{
/* 查詢打開(kāi)該數(shù)據(jù)庫(kù)的會(huì)話(session)情況, 并取得相應(yīng)的SID號(hào) */
sprintf(queryStr,"%s%s%s","select odb_sessionid From sysopendb where odb_dbname='",dbname,"'");
EXEC SQL Prepare pre_sid From $queryStr;
EXEC SQL Declare cur_sid Cursor For pre_sid;
EXEC SQL Open cur_sid;
for (;;) /* 逐個(gè)終止查詢出來(lái)的會(huì)話 */
{
EXEC SQL Fetch cur_sid Into $mySID;
if (SQLCODE == SQLNOTFOUND) break;
sprintf(shellCmd,"onmode -z %d",mySID);
system(shellCmd); /* 終止指定SID的會(huì)話 */
} /* end of get mySID Loop */
EXEC SQL Close cur_sid;
/* 先刪除該數(shù)據(jù)庫(kù)舊的dbexport目錄 */
sprintf(shellCmd,"rm -fr %s/%s.exp",pathStr,dbname);
system(shellCmd);
/* 將該數(shù)據(jù)庫(kù)dbexport到指定目錄下 */
sprintf(shellCmd,"dbexport %s -q -ss -o %s",dbname,pathStr);
system(shellCmd);
}
} /* 備份一個(gè)數(shù)據(jù)庫(kù)結(jié)束 */
} /* 逐條讀取需要備份的數(shù)據(jù)庫(kù)清單 */
fclose(dbfile);
return(0);
}
/* 如果在字串mystr中存在字符mych1, 則第一個(gè)mych1被mych2取代 */
char *str_repl_char(char *mystr,char mych1,char mych2)
{
char *p;
if ( ( p = strchr(mystr,mych1) ) == NULL )
return(NULL);
*p = mych2;
return(p);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -