新单位新任务,上一个任务就是在asp代码中操作启动dts,dts里面是对olap进行分析。老板给了asp脚本代码,可以启动dts。
<form action='dts.asp' method=post>
servername:<input type=text name=servername value=''><br>
usrname:<input type=text name=usrname><br>
pwd:<input type=password name=pwd><br>
conn:<input type=text name=DTSSQLStgFlag_Default2><br>
dtsname:<input type=text name=dtsname><br>
<input type=submit value=ok></form>
<%
dtsname=request.form("dtsname")
usrname=request.form("usrname")
servername=request.form("servername")
pwd=request.form("pwd")
DTSSQLStgFlag_Default2=request.form("DTSSQLStgFlag_Default2")
if dtsname="" or DTSSQLStgFlag_Default2="" or usrname="" or servername="" or pwd="" then
response.write("error")
response.end
else
response.write("dtsname:"&dtsname&"<br>")
response.write("usrname:"&usrname&"<br>")
response.write("servername:"&servername&"<br>")
response.write("DTSSQLStgFlag_Default2:"&DTSSQLStgFlag_Default2&"<br>")
dim objDTSPackage
dim objDTSStep
dim strResult
dim blnSucceeded
const DTSSQLStgFlag_Default = 0
const DTSStepExecResult_Failure = 1
set objDTSPackage = Server.CreateObject("DTS.Package")
blnSucceeded = true
objDTSPackage.LoadFromSQLServer servername, usrname, pwd, DTSSQLStgFlag_Default2, "", "", "", dtsname
objDTSPackage.Execute
for each objDTSStep in objDTSPackage.Steps
if objDTSStep.ExecutionResult = DTSStepExecResult_Failure then
strResult = strResult & "Package " & objDTSStep.Name & " failed.<br>"
blnSucceeded = false
else
strResult = strResult & "Package " & objDTSStep.Name & " succeeded.<br>"
end if
next
if blnSucceeded then
Response.Write "<h1>Package Succeeded</h1>"
else
Response.Write "<h1>Package Failed</h1>"
end if
Response.Write strResult
end if
%>
先自我解释一下,建立工作流最dts进行监视,如果出问题就报错。objDTSPackage.LoadFromSQLServer servername, usrname, pwd, DTSSQLStgFlag_Default2, "", "", "", dtsname
这个市关键的调动语句,没有什么难得,只要能连接就好。关于dtssqlstgflag_default参数也是无所谓的。0和256都可以。只要验证方式向符合就好。
理解起来并不难,但是实际操作总有点小问题。
首先启动dts,作任何东西都可以。只要连接了sql服务器就好。但是如果进行相应的sql数据库操作,你的启动账号必须在sql中有相应的数据库操作全县。
下面我就要把相应的dts放入我用的olap工作了。这时候问题就一大队了。
总是报告无法廉洁。就不说什么现象了。反正正确的配置我写一下六个记录好了
一般要有一个olap administrator管理员组。你的远程账号一定要是在这个组内如果是匿名就要用iusr等等。然后再将C:\Program Files\Microsoft Analysis Services\Bin目录分配管理组读写全县,其实说明白就是两个日志数据库的读写全县。一般这样远程用户同时可以启动连接olap在控制台上。其实从web上连接olap都是一样的进行操作。
我的测试环境是w2k3和winxp但是我换了w2k就不行了,怎么找都不知道原因,但是老板还是坚持操作。如何是好!???亏了我查了资料有另外的解决办法虽然不是很安全,但是达到了目的,使用bat文件进行远程asp操作。赫赫。如果哪位大哥知道w2k的权限分配的解决办法,请交流一下了。小生不胜感激。
@@echo off
if [%1] == [] goto Usage
if [%2] == [] goto Usage
if [%3] == [] goto Usage
if [%4] == [] goto Usage
SET LOGFILE=c:\DTSRUN.LOG
echo %TIME% Manual DTS package start run......... >> %LOGFILE%
echo ------------------------------------------ >> %LOGFILE%
@dtsrun /S %1 /U %2 /P %3 /N %4 >> %LOGFILE%
if errorlevel 1 goto Error
echo %TIME% Manual DTS package end......... >> %LOGFILE%
echo ------------------------------------------ >> %LOGFILE%
goto FINISH
:Error
echo ------------------------------------------- >> %LOGFILE%
echo DTSRUN ERROR PLS CHECK LOG .........
echo %TIME% GlobalStore Backup abnormal end. >> %LOGFILE%
goto FINISH
:Usage
echo.
echo Usage:crundts %1 servername %2 use_name %3 password %4 dts_name
:FINISH
<%
Set FileSys = Server.CreateObject("Scripting.FileSystemObject")
FileName = FileSys.GetTempName
Set WShShell = Server.CreateObject("WScript.Shell")
RetCode = WShShell.Run("d:\mint\dts\crundts.bat tjpc014 sa sa mint2" & " " & FileName, 1, True)
if RetCode = 0 Then
'There were no errors
else
Response.write("error")
end if
Set TextFile = FileSys.OpenTextFile("d:\mint\dts\" & FileName & ".txt", 1)
TextBuffer = TextFile.ReadAll
For i = 1 to Len(TextBuffer)
If Mid(TextBuffer,i,1) = chr(13) Then
Response.Write("<BR>")
else
Response.Write(Mid(TextBuffer,i,1))
end if
Next
TextFile.Close
'FileSys.DeleteFile "d:\mint\dts\" & FileName & ".txt"
%>