首页 文章

Oracle 11g上的VBScript DDL - 在DROP TABLE之后停止

提问于
浏览
0

我目前正在尝试迁移一系列非常棘手的VBScripts,这些VBScripts用于将数据从远程Oracle DB Source(我们的供应商)加载到我们(现在的)Oracle 11g R2实例中 . 这个脚本基于以前的Oracle 10g实例(完全不同的机器)工作正常,并且当我在CN字符串中使用的同一用户手动运行时,DDL本身工作得很好 .

Host OS: Windows 2008 R2 64位企业版
Host DB: Oracle 11g R2 64位

脚本:

Option explicit

Dim CN
Dim fso, objFile

Const strOutputFile = "\\<server>\<path>\<to>\LOGS\LOAD_DATA.LOG"

Set CN = CreateObject("ADODB.CONNECTION")

CN.Open "Driver={Oracle in OraDb11g_home1};Dbq=<tnsname>;Uid=<uid>;Pwd=<pwd>;"

Set fso = CreateObject("SCRIPTING.FileSystemObject")

Set objFile = fso.OpenTextFile(strOutputFile, 2, True)

objFile.WriteBlankLines(2)
objFile.WriteLine "*** Start Load_Data.vbs Log - " &Now() &" ***"

Call SBB_BASE()

objFile.WriteLine "*** End Load_Data.vbs Log - " &Now() &" ***"
objFile.WriteBlankLines(2)
objFile.Close

Set objFile = Nothing
Set fso = Nothing

CN.Close

Sub SBB_BASE()

On Error Resume Next

CN.Execute "TRUNCATE TABLE DATA.SBB_BASE"
CN.Execute "DROP TABLE DATA.SBB_BASE"

CN.Execute "CREATE TABLE DATA.SBB_BASE STORAGE (INITIAL 20000 NEXT 1024 PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 121) NOLOGGING TABLESPACE DATA AS SELECT * FROM SBB_BASE@<vendor>"

CN.Execute "CREATE INDEX DATA.IDX_SBB_SUB_ACCT_NO ON DATA.SBB_BASE(SUB_ACCT_NO_SBB) TABLESPACE DATA_IDX NOLOGGING"
CN.Execute "CREATE INDEX DATA.IDX_SBB_HSE_KEY ON DATA.SBB_BASE(HSE_KEY_SBB) TABLESPACE DATA_IDX NOLOGGING"
CN.Execute "CREATE INDEX DATA.IDX_SBB_EXT_STAT ON DATA.SBB_BASE(EXT_STAT_SBB) TABLESPACE DATA_IDX NOLOGGING"
CN.Execute "CREATE INDEX DATA.IDX_SBB_CUST_ACCT_NO ON DATA.SBB_BASE(CUST_ACCT_NO_SBB) TABLESPACE DATA_IDX NOLOGGING"

End Sub

当我从命令行运行.vbs时,它首先会提示有关不受信任脚本的警告(当尝试从Windows任务计划程序无人值守运行时可能会导致问题,但一次只出现一个问题),然后它似乎执行没有任何明显的错误 - 但只有前两个 CN.Execute 语句执行 - TRUNCATE TABLEDROP TABLE DDL命令 - 似乎没有其他任何处理 . 我知道情况就是这样,因为表和所有索引都从模式中消失了 .

但是,当我从每个 CN.Execute 行获取DDL并作为代码块手动执行它们时,它们工作得很好 . 我在Oracle服务器上找不到任何可能表明问题所在的错误日志 .

有什么想法吗?

编辑:在休息之后,我想出了如何在DDL语句中添加一些额外的日志记录来试图弄清楚发生了什么 - 事实证明,问题与CT-AS DDL中使用的 DBLINK 有关,因为我们的供应商已经如此善意地施加了上限 .

但是,我总共有四个不同的 DBLINKS 到同一个供应商,我可以使用不同的用户进行数据加载,我真的想在脚本中构建一些功能,可以检查是否有任何这些连接回来了 SESSIONS_PER_USER 消息,并且第一个没有完全独立的问题,我将创建一个不同的问题 .

1 回答

  • 0

    我不是Oracle的人,但从陈述的症状来看,听起来有些原因是在之前的一些语句完成之前正在执行创建,当drop完成时,它会丢弃你的新表 .

    我建议增强脚本,以便它不会继续创建,直到完成删除 .

    我可以在SQL服务器中为您提供此语法,但不是在oracle抱歉 .

相关问题