撈取 DNS 紀錄寫到資料庫

最近因任務需要在網域內把 IP 轉成電腦名稱,通常這個可以利用 nslookup 指令來達成,但是需要由 Excel 報表內呈現就有點難度。

 

所以我想出來的解決方案是去網域內的 DNS 控制器去撈所有的紀錄,然後把它寫回到資料庫內,這樣在做 SQL Query 時就可以很快速的撈取出來,靠先前開發的 VBScript 來做改良。

 

主要的抓取 DNS 紀錄的原始碼還是由 http://gallery.technet.microsoft.com/scriptcenter/8ebcaa52-f5c0-4fc1-99fe-d1c8798fddf4 微軟的網站找到的,我只是修正抓到資料後回寫到資料庫去。

首先建立一個很簡單的資料表 (table),可以參考底下的指令來產生

 

CREATE TABLE “YourSchemaName”.”IP_COMPNAME”

  (

    “IP_ADDR”   VARCHAR2(16 BYTE) NOT NULL ENABLE,

    “COMP_NAME” VARCHAR2(50 BYTE) NOT NULL ENABLE,

    “FQDN”      VARCHAR2(100 BYTE),

    CONSTRAINT “IP_COMPNAME_PK” PRIMARY KEY (“IP_ADDR”, “COMP_NAME”) USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE “WEBAP_TBS” ENABLE

  )

  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE

  (

    INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT

  )

  TABLESPACE ” YourSchemaTableSpace” ;

 

再把底下這一段 VB Script 貼到檔案去, 命名成 GetDNS.vbs

‘for standard query

const cnstCommand = 1

 

Dim IPAdd

Dim Computer

strComputer = “YourDNSServer”

 

‘ 設定連線字串

connectionString = “DRIVER={Microsoft ODBC for Oracle};SERVER=Oracle;User Id=yourschemaName;Password=YourPassword;”

Set connection = CreateObject(“ADODB.Connection”)

Set theCommand = CreateObject(“ADODB.Command”)

connection.Open connectionString

 

 

 

Set objWMIService = GetObject(“winmgmts:\” & strComputer & “rootMicrosoftDNS”)

Set colItems = objWMIService.ExecQuery( “SELECT * FROM MicrosoftDNS_PTRType”,,48)

For Each objItem in colItems

 

    CompNameArray = Split(objItem.RecordData ,  “.”)

    For i = LBound(CompNameArray) to UBound(CompNameArray)

    Computer = CompNameArray(0)

    Next

 

 

    IPAddArray = Split (objItem.OwnerName , “.”)

    

    For i = LBound(IPAddArray) to UBound(IPAddArray)

    IPAdd = IPAddArray(3) & “.” & IPAddArray(2) & “.” & IPAddArray(1) & “.” & IPAddArray(0)

    Next

   

               

‘ 清除掉先前記錄的資料

               

        cmdStr = “DELETE FROM WEBAP.IP_COMPNAME WHERE IP_ADDR = ‘” & IPAdd & “‘”

        WScript.Echo “Clear ” & IPAdd &”‘s DNS Record”

        thecommand.CommandText = CmdStr

        theCommand.ActiveConnection = connection

        theCommand.Execute

               

      ‘ 製作 SQL Command

        CmdStr = “INSERT INTO WEBAP.IP_COMPNAME (IP_ADDR, COMP_NAME, FQDN) VALUES (‘”

        CmdStr = CmdStr & IPADD & “‘, ‘” & Computer & “‘, ‘”

        CmdStr = CmdStr & objItem.RecordData & “‘) “

               

 

        ‘ 執行 SQL 指令

    ‘WScript.Echo cmdstr

        thecommand.CommandText = CmdStr

        thecommand.CommandType = cnstCommand

        thecommand.ActiveConnection = connection

        thecommand.Execute            

               

 

Next

 

Set Connection = nothing

set thecommand = nothing

 

 

 

Set objFSO = Nothing

Set objFile = Nothing

Set objWMIService = Nothing

Set colItems = Nothing

 

 

需要執行他時,只要在 DOS BOX 打入 CScript GetDNS.vbs 即可,執行時間隨DNS紀錄的多寡有所不同,應該在幾分鐘之內就可以跑完

 

自動收集遠端電腦資源資訊

最後一步自動去收集遠端電腦的資訊, 並且存放入資料庫內, 目前收集的資料有 (1) 電腦的實體記憶體 & 使用率, (2) CPU 使用率, (3) 硬碟大小及使用率

同樣的建立 Table 的 Script 如下:
CREATE TABLE OAUSER.DRV_DAILY_RECORD
(
DRV_DATE DATE NOT NULL,
COMPUTER_NAME VARCHAR2(100 CHAR) NOT NULL,
RESOURCE_TYPE VARCHAR2(20 CHAR) NOT NULL,
RESOURCE_NAME VARCHAR2(25 CHAR),
PERCENT_OF_USAGE NUMBER(4,2) NOT NULL,
MAX_VALUE NUMBER(25,2),
MIN_VALUE NUMBER(25,2) DEFAULT 0,
UOM VARCHAR2(20 CHAR)
)
Continue reading “自動收集遠端電腦資源資訊”

自動收集錯誤的 EventLog

今天在增加一個小程式, 主要的是可以收集電腦上的 EventLog 並存放置資料庫內, 免除每天必須連線到電腦上面去檢查的困擾

首先要在資料庫內建立 Table,
DROP TABLE OAUSER.EVT_RECORD CASCADE CONSTRAINTS;

CREATE TABLE OAUSER.EVT_RECORD
(
COMPUTER_NAME VARCHAR2(25 CHAR) NOT NULL,
EVENT_DATE DATE NOT NULL,
EVENT_CODE NUMBER(10) NOT NULL,
EVENT_TYPE VARCHAR2(10 CHAR) NOT NULL,
RECORD_NO NUMBER(10),
RECORD_NUMBER VARCHAR2(10 CHAR) NOT NULL,
CATEGORY_NAME VARCHAR2(25 CHAR) NOT NULL,
MESSAGE VARCHAR2(2000 CHAR),
SOURCE_NAME VARCHAR2(50 CHAR) NOT NULL,
USERNAME VARCHAR2(50 CHAR)
)
Continue reading “自動收集錯誤的 EventLog”

檢查備份是否完成/自動發信機制是否完成

資訊部每天都需要做人工檢核的作業, 有時真的相當的花費時間, 趁著有個一天的空檔, 開始著手來改善這個現象, 讓每日的檢核作業能盡量的減少人員話費的時間.

目標: (1) 每日檢查備份是否完成 (2) 公司內部的 Auto Mail 是否寄送成功.

以上兩者有部分相通, 都可以由檢核 Log 檔案內的關鍵字來判斷作業是否成功, 或是檢查備份出來的檔案是否存在, 檔案最少需要多大才算成功 等條件, 由以上的假設, 開始在網路上東拼西湊加入一點自己的邏輯判斷, 把以上的工作彙整成一個 VBScript.

建立資料庫 Table

首先在資料庫內建立兩個 Table 分別存放 Backup 記錄及 Auto Mail 的紀錄,

建立 Backup 記錄
drop table “OAUSER”.”BAK_DAILY_RECORD”;
CREATE TABLE “OAUSER”.”BAK_DAILY_RECORD” (“BAK_DATE” DATE NOT NULL,
“BAK_SYSTEM” VARCHAR2(100) NOT NULL,
“BAK_STATUS” VARCHAR2(20) NOT NULL, “BAK_DESCRIPTION”
VARCHAR2(200), “BAK_SERVER” VARCHAR2(25) NOT NULL,
“BAK_CONTACT” VARCHAR2(25), “BAK_FEQUENCY” VARCHAR2(20),
“BAK_SIZE” NUMBER(15) default 0
) TABLESPACE “OAUSER_TBS”;

建立 Auto Mail 記錄
drop table “OAUSER”.”AML_DAILY_RECORD”;
CREATE TABLE “OAUSER”.”AML_DAILY_RECORD” (“AML_DATE” DATE NOT NULL,
“AML_SYSTEM” VARCHAR2(100) NOT NULL,
“AML_STATUS” VARCHAR2(20) NOT NULL, “AML_DESCRIPTION”
VARCHAR2(200), “AML_SERVER” VARCHAR2(25) NOT NULL,
“AML_CONTACT” VARCHAR2(25), “AML_FEQUENCY”
VARCHAR2(20)) TABLESPACE “OAUSER_TBS”;

以上兩個表格建立好之後, 記得針對查詢的去建立 Index 喔… 因剛剛開始使用, 所以查詢條件還需要等資料量多一點之後再來判斷補上 Index.
Continue reading “檢查備份是否完成/自動發信機制是否完成”