⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbautoback.ec

📁 这是树上的代码
💻 EC
字号:
/* dbautoback.ec 利用SMI表实现INFORMIX数据库大批量自动备份 */
/* 编译方法: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("错误:您尚未定义需要备份的数据库清单文件(/databk/backdbname.list).\n");
		exit(1);
	}
	EXEC SQL DataBase sysmaster;
	while (fgets(dbname,sizeof(dbname),dbfile))
	{
	if (dbname[0] != '#')    /* 若该行不是注释行,则继续 */
	{
	str_repl_char(dbname,'\n',0);    /* 将换行符去除 */
	/* 检查ONLINE中有否该名称的数据库存在 */
	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,没有该数据库\n",dbname);
	else
	{
		/* 查询打开该数据库的会话(session)情况, 并取得相应的SID号  */
		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 (;;)  /* 逐个终止查询出来的会话  */
		{
			EXEC SQL Fetch cur_sid Into $mySID;
			if (SQLCODE == SQLNOTFOUND) break;
			sprintf(shellCmd,"onmode -z %d",mySID);
			system(shellCmd);    /* 终止指定SID的会话 */
		}	/*	 end of get mySID Loop	*/
		EXEC SQL Close cur_sid;
		/* 先删除该数据库旧的dbexport目录 */
		sprintf(shellCmd,"rm -fr %s/%s.exp",pathStr,dbname);
		system(shellCmd);
		/* 将该数据库dbexport到指定目录下 */
		sprintf(shellCmd,"dbexport %s -q -ss -o %s",dbname,pathStr);
		system(shellCmd);
	}
	}	/*  备份一个数据库结束  */
	}	/*  逐条读取需要备份的数据库清单  */
	fclose(dbfile);
	return(0); 
}  

/* 如果在字串mystr中存在字符mych1, 则第一个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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -