<!--#include file=../conn.asp-->
<!-- #include file="inc/const.asp" -->
<%Head()
dim admin_flag,action
dim dbpath,bkfolder,bkdbname,fso,fso1
	action=trim(request("action"))
select case action
	case "CompressData"		'压缩数据
	admin_flag=",25,"
	if not master or instr(","&session("flag")&",",admin_flag)=0 then
		Errmsg=ErrMsg + "<BR><li>本页面为管理员专用，请<a href=../"&LoginUrl&" target=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"
		Ms_error()
	else
		dim tmprs
		dim allarticle
		dim Maxid
		dim topic,username,dateandtime,body
		if request("act")="SaveComp" then
		Call SaveComp()
		else
		call CompressData()
		end if
	end if	
case "BackupData"		'备份数据
	admin_flag=",26,"
	if not master or instr(","&session("flag")&",",admin_flag)=0 then
		Errmsg=ErrMsg + "<BR><li>本页面为管理员专用，请<a href=../"&LoginUrl&" target=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"
		Ms_error()
	else
		if request("act")="Backup" then
			call updata()
		else
			call BackupData()
		end if
	end if
case "RestoreData"		'恢复数据
	admin_flag=",27,"
	dim backpath
	if not master or instr(","&session("flag")&",",admin_flag)=0 then
		Errmsg=ErrMsg + "<BR><li>本页面为管理员专用，请<a href=../"&LoginUrl&" target=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"
		Ms_error()
	else
		if request("act")="Restore" then
			Dbpath=request.form("Dbpath")
			backpath=request.form("backpath")
			if dbpath="" then
			response.write "请输入您要恢复成的数据库全名"	
			else
			Dbpath=server.mappath(Dbpath)
			end if
			backpath=server.mappath(backpath)
		
			Set Fso=server.createobject("scripting.filesystemobject")
			if fso.fileexists(dbpath) then  					
			fso.copyfile Dbpath,Backpath
			response.write "成功恢复数据！"
			else
			response.write "备份目录下并无您的备份文件！"	
			end if
		else
			call RestoreData()
		end if
	end if
case "Readsql"		'SQL数据库说明
	admin_flag=",24,"
	if not master or instr(","&session("flag")&",",admin_flag)=0 then
		Errmsg=ErrMsg + "<BR><li> 本页面为管理员专用，请<a href=../"&LoginUrl&" target=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"
		Ms_error()
	else
		call Readsql()
	end if
case "SqlGo"		'SQL语句执行
	admin_flag=",28,"
	if not master or instr(","&session("flag")&",",admin_flag)=0 then
		Errmsg=ErrMsg + "<BR><li> 本页面为管理员专用，请<a href=../"&LoginUrl&" target=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"
		Ms_error()
	else
		if request("act")="s" then
			call savesql()
		else
			call SqlGo()
		end if
	end if		
case else
		Errmsg=ErrMsg + "<BR><li>选取相应的操作。"
		Ms_error()
end select

Footer()
response.write"</body></html>"

sub Readsql()''SQL说明%>
<table width="95%" border="0" cellspacing="1" cellpadding="3"  align=center class="tableBorder">
<tr> 
<th height="23" colspan="3" class="tableHeaderText">SQL数据库数据处理说明</th>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow">
<B>一、备份数据库</B> <BR> <BR>
            1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<BR>
            2、SQL Server组-->双击打开你的服务器-->双击打开数据库目录<BR>
            3、选择你的数据库名称（如交友数据库love）-->然后点上面菜单中的工具-->选择备份数据库<BR>
            4、备份选项选择完全备份，目的中的备份到如果原来有路径和名称则选中名称点删除，然后点添加，如果原来没有路径和名称则直接选择添加，接着指定路径和文件名，指定后点确定返回备份窗口，接着点确定进行备份 
            <BR> <BR> <B>二、还原数据库</B><BR> <BR>
            1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<BR>
            2、SQL Server组-->双击打开你的服务器-->点图标栏的新建数据库图标，新建数据库的名字自行取<BR>
            3、点击新建好的数据库名称（如交友数据库love）-->然后点上面菜单中的工具-->选择恢复数据库<BR>
            4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回，这时候设备栏应该出现您刚才选择的数据库备份文件名，备份号默认为1（如果您对同一个文件做过多次备份，可以点击备份号旁边的查看内容，在复选框中选择最新的一次备份后点确定）-->然后点击上方常规旁边的选项按钮<BR>
            5、在出现的窗口中选择在现有数据库上强制还原，以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置（也可以指定自己的目录），逻辑文件名不需要改动，移至物理文件名要根据你所恢复的机器情况做改动，如您的SQL数据库装在D:\Program 
            Files\Microsoft SQL Server\MSSQL\Data，那么就按照您恢复机器的目录进行相关改动改动，并且最后的文件名最好改成您当前的数据库名（如原来是love_data.mdf，现在的数据库是love，就改成love_data.mdf），日志和数据文件都要按照这样的方式做相关的改动（日志的文件名是*_log.ldf结尾的），这里的恢复目录您可以自由设置，前提是该目录必须存在（如您可以指定d:\sqldata\love_data.mdf或者d:\sqldata\love_log.ldf），否则恢复将报错<BR>
            6、修改完成后，点击下面的确定进行恢复，这时会出现一个进度条，提示恢复的进度，恢复完成后系统会自动提示成功，如中间提示报错，请记录下相关的错误内容并询问对SQL操作比较熟悉的人员，一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误，数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作，如果还提示正在使用的错误可以将SQL服务停止然后重起看看，至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复<BR> 
            <BR> <B>三、收缩数据库</B><BR> <BR>
            一般情况下，SQL数据库的收缩并不能很大程度上减小数据库大小，其主要作用是收缩日志大小，应当定期进行此操作以免数据库日志过大<BR>
            1、设置数据库模式为简单模式：打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称（如交友数据库love）-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”，然后按确定保存<BR>
            2、在当前数据库上点右键，看所有任务中的收缩数据库，一般里面的默认设置不用调整，直接点确定<BR>
            3、<font color=blue>收缩数据库完成后，建议将您的数据库属性重新设置为标准模式，操作方法同第一点，因为日志在一些异常情况下往往是恢复数据库的重要依据</font> 
            <BR> <BR> <B>四、设定每日自动备份数据库</B><BR> <BR> <font color=red>强烈建议有条件的用户进行此操作！</font><BR>
            1、打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器<BR>
            2、然后点上面菜单中的工具-->选择数据库维护计划器<BR>
            3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息，这里一般不用做选择-->下一步检查数据完整性，也一般不选择<BR>
            4、下一步指定数据库维护计划，默认的是1周备份一次，点击更改选择每天备份后点确定<BR>
            5、下一步指定备份的磁盘目录，选择指定目录，如您可以在D盘新建一个目录如：d:\databak，然后在这里选择使用此目录，如果您的数据库比较多最好选择为每个数据库建立子目录，然后选择删除早于多少天前的备份，一般设定4－7天，这看您的具体备份要求，备份文件扩展名一般都是bak就用默认的<BR>
            6、下一步指定事务日志备份计划，看您的需要做选择-->下一步要生成的报表，一般不做选择-->下一步维护计划历史记录，最好用默认的选项-->下一步完成<BR>
            7、完成后系统很可能会提示Sql Server Agent服务未启动，先点确定完成计划设定，然后找到桌面最右边状态栏中的SQL绿色图标，双击点开，在服务中选择Sql 
            Server Agent，然后点击运行箭头，选上下方的当启动OS时自动启动服务<BR>
            8、这个时候数据库计划已经成功的运行了，他将按照您上面的设置进行自动备份 <BR> <BR>
            修改计划：<BR>
            1、打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->管理-->数据库维护计划-->打开后可看到你设定的计划，可以进行修改或者删除操作 
            <BR> <BR> <B>五、数据的转移（新建数据库或转移服务器）</B><BR> <BR>
            一般情况下，最好使用备份和还原操作来进行转移数据，在特殊情况下，可以用导入导出的方式进行转移，这里介绍的就是导入导出方式，导入导出方式转移数据一个作用就是可以在收缩数据库无效的情况下用来减小（收缩）数据库的大小，本操作默认为您对SQL的操作有一定的了解，如果对其中的部分操作不理解，可以咨询动网相关人员或者查询网上资料<BR>
            1、将原数据库的所有表、存储过程导出成一个SQL文件，导出的时候注意在选项中选择编写索引脚本和编写主键、外键、默认值和检查约束脚本选项<BR>
            2、新建数据库，对新建数据库执行第一步中所建立的SQL文件<BR>
            3、用SQL的导入导出方式，对新数据库导入原数据库中的所有表内容
</td>
</tr>
</table>
<%end sub

sub SqlGo()''SQL语句执行%>
<table width="95%" border="0" cellspacing="1" cellpadding="3"  align=center class="tableBorder">
<tr> 
<th height="23" colspan="3" class="tableHeaderText">执行SQL语句中心</th>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow"><b>SOL语句执行操作</b>：本操作仅限高级、对SQL编程比较熟悉的用户，您可以直接输入sql执行语句，比如delete 
      from Ms_user where username='test'进行删除某用户注册操作，在操作前请慎重考虑您的执行语句是否正确和完整，执行后不可恢复。 
      <br>
          alter table [Ms_user] add Joindate date isNull 添加Joindate字段<br>
          alter table [Ms_user] add UserArt smallint isNull 添加UserArt字段<br>
          update [Ms_user] set UserArt=Userdiary 更新UserArt为当前Userdiary<br>
          alter table [Ms_user] add Userlogins smallint isNull 添加Userlogins字段<br>
          update [Ms_user] set Userlogins=Lastlogins 更新Userlogins为当前Lastlogins
</td>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow">
<Form Name=FormPst Method=Post Action="?action=SqlGo">
<Input type="hidden" name="act" value="s">
                  <FieldSet>
                  <Legend>请输入SQL语句</Legend>
                  指令： 
                  <Input type="text" name="SQL_Statement" Size=60>
                  <p> 
                    <Input type="Submit" Value=" 执行 ">
                  <p> 
                  </FieldSet>
                </Form>
</td>
</tr>
</table>
<%end sub

sub savesql()''执行SQL语句
dim SQL_Statement
SQL_Statement=Request("SQL_Statement")
if SQL_Statement<>Empty then
On Error Resume Next 
conn.Execute(SQL_Statement)
if err.number="0" then
Ms_suc("执行成功")
else
response.write "语句有问题，具体出错如下：<br>"
response.write Err.Description
err.clear
end if
else
Errmsg=ErrMsg + "<br>语句不能为空，请输入SQL语句！"
Ms_error()
end if
end sub

sub CompressData()''压缩数据
If IsSqlDataBase = 1 Then
	Readsql()
	Exit Sub
End If%>
<table width="95%" border="0" cellspacing="1" cellpadding="3"  align=center class="tableBorder">
<form action="data.asp?action=CompressData&act=SaveComp" method="post">
<tr> 
<th height="23" colspan="3" class="tableHeaderText">Access数据库压缩</th>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow"><b>注意：</b><br>输入数据库所在相对路径,并且输入数据库名称（正在使用中数据库不能压缩，请选择备份数据库进行压缩操作）
</td>
</tr>
<tr>
<td class="forumrow">压缩数据库：<input type="text" name="dbpath" value="<%=db%>" size=40>&nbsp;
<input type="submit" value="开始压缩"></td>
</tr>
<tr>
<td class="forumrow"><input type="checkbox" name="boolIs97" value="True">如果使用 Access 97 数据库请选择
(默认为 Access 2000 数据库)<br><br></td>
</tr>
</form>
</table>
<%
end sub

sub SaveComp()
dim dbpath,boolIs97
dbpath = request("dbpath")
boolIs97 = request("boolIs97")

If dbpath <> "" Then
dbpath = server.mappath(dbpath)
	response.write(CompactDB(dbpath,boolIs97))
End If
end sub

Function CompactDB(dbPath, boolIs97)
Dim fso, Engine, strDBPath,JET_3X
strDBPath = left(dbPath,instrrev(DBPath,"\"))
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(dbPath) Then
	fso.CopyFile dbpath,strDBPath & "temp.mdb"
	Set Engine = CreateObject("JRO.JetEngine")

	If boolIs97 = "True" Then
		Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb", _
		"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp1.mdb;" _
		& "Jet OLEDB:Engine Type=" & JET_3X
	Else
		Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb", _
		"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp1.mdb"
	End If

fso.CopyFile strDBPath & "temp1.mdb",dbpath
fso.DeleteFile(strDBPath & "temp.mdb")
fso.DeleteFile(strDBPath & "temp1.mdb")
Set fso = nothing
Set Engine = nothing

	CompactDB = "你的数据库, " & dbpath & ", 已经压缩成功!" & vbCrLf

Else
	CompactDB = "数据库名称或路径不正确. 请重试!" & vbCrLf
End If

End Function


sub BackupData()''备份数据库
If IsSqlDataBase = 1 Then
	Readsql()
	Exit Sub
End If%>
<table width="95%" border="0" cellspacing="1" cellpadding="3"  align=center class="tableBorder">
<tr> 
<th height="23" colspan="3" class="tableHeaderText">Access数据库备份</th>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow"><B>备份数据库</B>( 需要FSO支持，FSO相关帮助请看微软网站 )
</td>
</tr>
<form method="post" action="data.asp?action=BackupData&act=Backup">
  				<tr>
  					<td height=100 class="forumrow">
  						&nbsp;&nbsp;
						当前数据库路径(绝对路径)：<input type=text size=30 name=DBpath value="<%=db%>"><BR>&nbsp;&nbsp;
						备份数据库目录(相对路径)：<input type=text size=30 name=bkfolder value="../<%=split(Dbbackup,"|")(0)%>">&nbsp;如目录不存在，程序将自动创建<BR>&nbsp;&nbsp;
						备份数据库名称(填写名称)：<input type=text size=30 name=bkDBname value="<%=split(Dbbackup,"|")(1)%>">&nbsp;如备份目录有该文件，将覆盖，如没有，将自动创建<BR>
						&nbsp;&nbsp;<input type=submit value="确定"><br>
  						-----------------------------------------------------------------------------------------<br>
  						&nbsp;&nbsp;在上面填写本程序的数据库路径全名，本程序的默认数据库文件为<%=split(Dbbackup,"|")(0)%><%=split(Dbbackup,"|")(1)%><br>
  						&nbsp;&nbsp;您可以用这个功能来备份您的法规数据，以保证您的数据安全！<br>
  						&nbsp;&nbsp;<B>注意：请到基本设置中更改备份数据库目录及命名</B>				</font>
  					</td>
  				</tr>	
  				</form>
</table>
<%
end sub

sub updata()
		On error resume next
		Dim FileConnStr,Fileconn
		Dbpath=request.Form("Dbpath")
		Dbpath=server.mappath(Dbpath)
		bkfolder=request.Form("bkfolder")
		bkdbname=request.Form("bkdbname")

		FileConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Dbpath
		Set Fileconn = Server.CreateObject("ADODB.Connection")
		Fileconn.open FileConnStr
		If Err Then
			Response.Write Err.Description
			Err.Clear
			Set Fileconn = Nothing
			Response.Write "备份的文件并非合法的数据库。"
			Exit Sub
		Else
			Set Fileconn = Nothing
		End If
		Set Fso=server.createobject("scripting.filesystemobject")
		If Fso.fileexists(dbpath) then
			If CheckDir(bkfolder) = True Then
				Fso.copyfile dbpath,bkfolder& "\"& bkdbname
			else
				MakeNewsDir bkfolder
				Fso.copyfile dbpath,bkfolder& "\"& bkdbname
			end if
			response.write "备份数据库成功，您备份的数据库路径为" &bkfolder& ""& bkdbname
		Else
			response.write "找不到您所需要备份的文件。"
		End if
end sub
'------------------检查某一目录是否存在-------------------
Function CheckDir(FolderPath)
	folderpath=Server.MapPath(".")&"\"&folderpath
    Set fso1 = CreateObject("Scripting.FileSystemObject")
    If fso1.FolderExists(FolderPath) then
       '存在
       CheckDir = True
    Else
       '不存在
       CheckDir = False
    End if
    Set fso1 = nothing
End Function
'-------------根据指定名称生成目录-----------------------
Function MakeNewsDir(foldername)
	dim f
    Set fso1 = CreateObject("Scripting.FileSystemObject")
        Set f = fso1.CreateFolder(foldername)
        MakeNewsDir = True
    Set fso1 = nothing
End Function


sub RestoreData()''恢复数据库
If IsSqlDataBase = 1 Then
	Readsql()
	Exit Sub
End If%>
<table width="95%" border="0" cellspacing="1" cellpadding="3"  align=center class="tableBorder">
<tr> 
<th height="23" colspan="3" class="tableHeaderText">Access恢复数据库</th>
</tr>
<tr>
<td height="25" colspan="3" class="forumrow"><B>恢复数据库</B>( 需要FSO支持，FSO相关帮助请看微软网站 
      )
</td>
</tr>
<form method="post" action="data.asp?action=RestoreData&act=Restore">
  				
  				<tr>
  					<td height=100 class="forumrow">
  						&nbsp;&nbsp;备份数据库路径(相对)：<input type=text size=30 name=DBpath value="../<%=split(Dbbackup,"|")(0)%><%=split(Dbbackup,"|")(1)%>">&nbsp;&nbsp;<BR>
  						&nbsp;&nbsp;目标数据库路径(绝对)：<input type=text size=30 name=backpath value="<%=db%>"><BR>&nbsp;&nbsp;填写您当前使用的数据库路径，如不想覆盖当前文件，可自行命名（注意路径是否正确），然后修改conn.asp文件，如果目标文件名和当前使用数据库名一致的话，不需修改conn.asp文件<BR>
						&nbsp;&nbsp;<input type=submit value="恢复数据"> <br>
  						-----------------------------------------------------------------------------------------<br>
  						&nbsp;&nbsp;在上面填写本程序的数据库路径全名，本程序的默认备份数据库文件为<%=split(Dbbackup,"|")(0)%><%=split(Dbbackup,"|")(1)%>。<br>
  						&nbsp;&nbsp;您可以用这个功能来备份您的法规数据，以保证您的数据安全！<br>
  						&nbsp;&nbsp;<B>注意：请到基本设置中更改备份数据库目录及命名</B></font>
  					</td>
  				</tr>	
  				</form>
</table>
<%
end sub
%>