进行数据库跟踪分析的工具
2012-10-30 10:32
169 查看
笔者以SQLServer为例,写了个分析数据库的工具,下边的是主要代码:
Form1.cs
Config.cs
MyModel.cs
config.ini
完整代码请点击:http://download.csdn.net/detail/robake/4701086
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; using System.Threading; using System.Data.SqlClient; namespace Database_tracking { public partial class Form1 : Form { private int ThreadState = 1;//Thread运行状态,0为运行,1停止 private string configPath = Application.StartupPath + "\\config.ini"; /****操作INI文件开始***********/ [System.Runtime.InteropServices.DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 声明INI文件的读操作函数 GetPrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath); public string ReadValue(string section, string key) { // 每次从ini中读取多少字节 System.Text.StringBuilder temp = new System.Text.StringBuilder(255); // section=配置节,key=键名,temp=上面,path=路径 GetPrivateProfileString(section, key, "", temp, 255, configPath); return temp.ToString(); } public void Writue(string section, string key, string value) { // section=配置节,key=键名,value=键值,path=路径 WritePrivateProfileString(section, key, value, configPath); } /*****操作INI文件结束**********/ public Form1() { InitializeComponent(); this.FormClosing += new FormClosingEventHandler(Form1_Closing); } private void Form1_Closing(object sender, FormClosingEventArgs e) { if (this.ThreadState != 1) { MessageBox.Show("Please stop all the thread first."); e.Cancel = true; } else { for (int i = 0; i < mThread.Length; i++) { if (mThread[i] != null) { if (mThread[i].IsAlive==true) { mThread[i].Abort(); } } } this.Dispose(); } } //private ArrayList mThread=new ArrayList(); private Thread[] mThread; private void button2_Click(object sender, EventArgs e) { //开始执行 if (button2.Text == "Start") { SetText("Starting..."); ThreadState = 0; listView1.Items.Clear(); cDataIndex = 0; lCount = 0; //启动线程 SetObjectStatus(false, button1); SetObjectStatus(false, button3); if (mDataBase.Length <= int.Parse(MyModel.ThreadCount)) { MyModel.ThreadCount = mDataBase.Length.ToString(); } ChangeValue("Stop"); for (int i = 0; i < int.Parse(MyModel.ThreadCount); i++) { mThread[i] = new Thread(ThreadWork); mThread[i].IsBackground = true; mThread[i].Name = i.ToString(); mThread[i].Start(); } } else { ThreadState = 1; ChangeValue("Start"); } } private void button1_Click(object sender, EventArgs e) { Config s = new Config(); s.ShowDialog(); } private string[] mDataBase; private int cDataIndex = 0;//当前运行的数字 private void Form1_Load(object sender, EventArgs e) { MyModel.MasterServer = ReadValue("Main", "MasterServer"); MyModel.MasterUid = ReadValue("Main", "MasterUid"); MyModel.MasterPwd = ReadValue("Main", "MasterPwd"); MyModel.MirrorServer = ReadValue("Main", "MirrorServer"); MyModel.MirrorUid = ReadValue("Main", "MirrorUid"); MyModel.MirrorPwd = ReadValue("Main", "MirrorPwd"); MyModel.ThreadCount = ReadValue("Main", "ThreadCount"); MyModel.Library = ReadValue("Main", "Library"); mThread = new Thread[(int.Parse(MyModel.ThreadCount))]; //将数据库名称存入数组 mDataBase = MyModel.Library.Split(new char[]{','}); } delegate void ChangeTextValue(string s); private void ChangeValue(string s) { if (this.button2.InvokeRequired) { ChangeTextValue d = new ChangeTextValue(ChangeValue); this.Invoke(d, new object[] { s }); } else { this.button2.Text = s; } } delegate void SetS(string s); private void SetText(string s) { if (this.button2.InvokeRequired) { SetS d = new SetS(SetText); this.Invoke(d, new object[] { s }); } else { this.Status.Text =DateTime.Now.ToString() + " " + s; } } private void ThreadWork() { while(true) { switch(ThreadState) { case 0: lock (this.button2) { //执行检测 CheckDataBase(); try { Thread.Sleep(50); //MessageBox.Show(Thread.CurrentThread.Name + " Close"); SetText("Complete..."); SetObjectStatus(true, button1); SetObjectStatus(true, button3); ChangeValue("Start"); Thread.CurrentThread.Abort(); } catch { } finally { Thread.CurrentThread.Abort(); } } break; case 1: try { Thread.Sleep(50); } catch { } finally { Thread.CurrentThread.Abort(); } break; } } } private int lCount = 0;//总记录数 delegate void a(string ID,string DataBaseName ,string tableName,string MasterRecordCount,string MirrorRecordCount,string same); private void newLine(string ID, string DataBaseName , string tableName, string MasterRecordCount, string MirrorRecordCount, string same) { if (this.listView1.InvokeRequired) { a s = new a(newLine); this.Invoke(s, new object[]{ID,DataBaseName,tableName ,MasterRecordCount,MirrorRecordCount,same}); } else { ListViewItem Temp=new ListViewItem(); Temp.Text=(ID); Temp.SubItems.Add(DataBaseName); Temp.SubItems.Add(tableName); Temp.SubItems.Add(MasterRecordCount); Temp.SubItems.Add(MirrorRecordCount); Temp.SubItems.Add(same); listView1.Items.Add(Temp); } } private void CheckDataBase() { lock (mDataBase) { do { SetText("Connecting DataBase..."); if (cDataIndex > mDataBase.Length - 1) { return; } string conn_Master_String = "Server=" + MyModel.MasterServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MasterUid + ";pwd=" + MyModel.MasterPwd; string conn_Mirror_String = "Server=" + MyModel.MirrorServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MirrorUid + ";pwd=" + MyModel.MirrorPwd; SqlConnection conn_Master = new SqlConnection(conn_Master_String); SqlConnection conn_Mirror = new SqlConnection(conn_Mirror_String); SqlCommand u_Master = new SqlCommand(); SqlCommand u_Mirror = new SqlCommand(); u_Master.Connection = conn_Master; u_Mirror.Connection = conn_Mirror; SetText("Geting all tables..."); //获取所有表 u_Master.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'"; u_Mirror.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'"; u_Master.Connection.Open(); u_Mirror.Connection.Open(); SqlDataAdapter Master_Sqldapater = new SqlDataAdapter(); SqlDataAdapter Mirror_Sqldapater = new SqlDataAdapter(); Master_Sqldapater.SelectCommand = u_Master; //Mirror_Sqldapater.SelectCommand = u_Mirror; DataSet Master_ds = new DataSet(); //DataSet Mirror_ds = new DataSet(); Master_Sqldapater.Fill(Master_ds); //Mirror_Sqldapater.Fill(Mirror_ds); int MasterCount = 0; int MirrorCount = 0; string mText = ""; for (int i = 0; i < Master_ds.Tables[0].Rows.Count; i++) { try { if (ThreadState == 0) { SetText("Comparing..."); //MessageBox.Show(Master_ds.Tables[0].Rows[i]["Name"].ToString()); u_Master.CommandText = "SELECT Count(*) From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]"; MasterCount = int.Parse(u_Master.ExecuteScalar().ToString()); u_Mirror.CommandText = "SELECT Count(*) From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]"; MirrorCount = int.Parse(u_Mirror.ExecuteScalar().ToString()); lCount += 1; mText = Master_ds.Tables[0].Rows[i]["Name"].ToString(); //newLine(lCount.ToString(), "No", mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString(), MasterCount.ToString()); //lCount += 1; //newLine(lCount.ToString(), "Yes", mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString(), MirrorCount.ToString()); if (MasterCount == MirrorCount) { //当记录行相同的情况下判断是否相同的值 SetText("Checking table: " + Master_ds.Tables[0].Rows[i]["Name"].ToString()); DataSet Tempds = new DataSet(); u_Master.CommandText = "select name from syscolumns where id=object_id('" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "') order by colid"; Master_Sqldapater.SelectCommand = u_Master; Master_Sqldapater.Fill(Tempds); DataSet mMaster = new DataSet(); DataSet mMirror = new DataSet(); u_Master.CommandText = "SELECT * From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); switch (Master_ds.Tables[0].Rows[i]["Name"].ToString()) { case "ExecutionLogStorage": u_Master.CommandText = "SELECT * FROM [ReportServer].[dbo].[ExecutionLogStorage_xml]order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; case "Reporting": u_Master.CommandText = "SELECT * FROM [RHSDB].[dbo].[Reporting_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; case "ServiceVersions": u_Master.CommandText = "SELECT * FROM [SaaS_BusConfiguration].[dbo].[ServiceVersions_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; case "Log_EventData": u_Master.CommandText = "SELECT * " + " FROM [TopsLogging].[dbo].[Log_EventData_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; case "TopsPolicyXml": u_Master.CommandText = "SELECT * FROM [VirusScanProd].[dbo].[TopsPolicyXml_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; case "ScContactActionItems": u_Master.CommandText = "SELECT * FROM [VirusScanProd].[dbo].[ScContactActionItems_xml] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; default: u_Master.CommandText = "select * from [" + mDataBase[cDataIndex] + "].[dbo].[" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); break; } u_Mirror.CommandText = "SELECT * From [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] order by " + Tempds.Tables[0].Rows[0][0].ToString() + "," + Tempds.Tables[0].Rows[1][0].ToString(); Master_Sqldapater.SelectCommand = u_Master; Mirror_Sqldapater.SelectCommand = u_Mirror; Master_Sqldapater.Fill(mMaster); Mirror_Sqldapater.Fill(mMirror); string temp = "Yes"; for (int o = 0; o < mMaster.Tables[0].Rows.Count; o++) { for (int x = 0; x < Tempds.Tables[0].Rows.Count; x++) { if (mMaster.Tables[0].Rows[o][x].ToString().Contains("WINDOWS\\System32") == true) { MessageBox.Show(Master_ds.Tables[0].Rows[i]["Name"].ToString() + "\n" + mDataBase[cDataIndex]); } if (mMaster.Tables[0].Rows[o][x].ToString().Trim().GetHashCode() != mMirror.Tables[0].Rows[o][x].ToString().Trim().GetHashCode()) { //MessageBox.Show(mMaster.Tables[0].Rows[o][x].ToString().GetHashCode() + "\n" + mMirror.Tables[0].Rows[o][x].ToString().GetHashCode() + "\n" + u_Master.CommandText); temp = "The line " + (o + 1).ToString() + " of the record is not the same"; } } } Tempds.Dispose(); newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString() , MasterCount.ToString(), MirrorCount.ToString(), temp); } else { newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString() , MasterCount.ToString(), MirrorCount.ToString(), "No"); } } } catch //(Exception es) { //MessageBox.Show(mDataBase[cDataIndex] + "\n" + es.Message); } } Master_Sqldapater.Dispose(); Mirror_Sqldapater.Dispose(); Master_ds.Dispose(); //Mirror_ds.Dispose(); u_Master.Dispose(); u_Mirror.Dispose(); conn_Master.Close(); conn_Mirror.Close(); conn_Master.Dispose(); conn_Mirror.Dispose(); cDataIndex += 1; if (cDataIndex > mDataBase.Length-1) { ThreadState = 1; } SetText("Comparing Complete,continuing..."); CheckDataBase(); //MessageBox.Show(cDataIndex.ToString()); } while (cDataIndex < mDataBase.Length); } } delegate void ObjectStatus(bool a, Button s); private void SetObjectStatus(bool a, Button s) { if (s.InvokeRequired) { ObjectStatus d = new ObjectStatus(SetObjectStatus); this.Invoke(d, new object[]{ a, s }); } else { s.Enabled = a; } } private void button3_Click(object sender, EventArgs e) { cDataIndex = 0; Thread a = new Thread(Sync); a.IsBackground = true; a.Start(); } //执行同步 private void Sync() { SetObjectStatus(false, button1); SetObjectStatus(false, button2); SetObjectStatus(false, button3); SyncData(); SetObjectStatus(true, button1); SetObjectStatus(true, button2); SetObjectStatus(true, button3); try { Thread.Sleep(5); } catch { } finally { Thread.CurrentThread.Abort(); } } private void SyncData() { do { SetText("Connecting DataBase..."); if (cDataIndex > mDataBase.Length - 1) { return; } string conn_Master_String = "Server=" + MyModel.MasterServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MasterUid + ";pwd=" + MyModel.MasterPwd; string conn_Mirror_String = "Server=" + MyModel.MirrorServer + ";database=" + this.mDataBase[cDataIndex] + ";uid=" + MyModel.MirrorUid + ";pwd=" + MyModel.MirrorPwd; SqlConnection conn_Master = new SqlConnection(conn_Master_String); SqlConnection conn_Mirror = new SqlConnection(conn_Mirror_String); SqlCommand u_Master = new SqlCommand(); SqlCommand u_Mirror = new SqlCommand(); u_Master.Connection = conn_Master; u_Mirror.Connection = conn_Mirror; SetText("Geting all tables..."); //获取所有表 u_Master.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'"; u_Mirror.CommandText = "SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U'"; u_Master.Connection.Open(); u_Mirror.Connection.Open(); SqlDataAdapter Master_Sqldapater = new SqlDataAdapter(); SqlDataAdapter Mirror_Sqldapater = new SqlDataAdapter(); Master_Sqldapater.SelectCommand = u_Master; //Mirror_Sqldapater.SelectCommand = u_Mirror; DataSet Master_ds = new DataSet(); //DataSet Mirror_ds = new DataSet(); Master_Sqldapater.Fill(Master_ds); //Mirror_Sqldapater.Fill(Mirror_ds); string mText = ""; for (int i = 0; i < Master_ds.Tables[0].Rows.Count; i++) { try { SetText("Truncate Mirror data..."); u_Mirror.CommandText = "truncate table [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]"; u_Mirror.ExecuteNonQuery(); //lCount += 1; mText = Master_ds.Tables[0].Rows[i]["Name"].ToString(); /* if (mText.Contains("TopsPolicyXml")==true) { u_Mirror.CommandText = "SELECT COUNT(*) FROM [TopsPolicyXml]"; MessageBox.Show(u_Mirror.ExecuteScalar().ToString()); } */ //当记录行相同的情况下判断是否相同的值 SetText("Sync table: " + Master_ds.Tables[0].Rows[i]["Name"].ToString()); DataSet Tempds = new DataSet(); switch (Master_ds.Tables[0].Rows[i]["Name"].ToString()) { case "ExecutionLogStorage": u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * FROM [192.168.0.74].[ReportServer].[dbo].[ExecutionLogStorage_xml]"; break; case "Reporting": u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * FROM [192.168.0.74].[RHSDB].[dbo].[Reporting_xml]"; break; case "ServiceVersions": u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * FROM [192.168.0.74].[SaaS_BusConfiguration].[dbo].[ServiceVersions_xml]"; break; case "Log_EventData": u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * " + " FROM [192.168.0.74].[TopsLogging].[dbo].[Log_EventData_xml]"; break; case "TopsPolicyXml": //u_Mirror.CommandText = "SELECT [policyXml] FROM [192.168.0.74].[VirusScanProd].[dbo].[TopsPolicyXml_xml] where id=27"; //MessageBox.Show(u_Mirror.ExecuteScalar().ToString()); u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * FROM [192.168.0.74].[VirusScanProd].[dbo].[TopsPolicyXml_xml]"; break; case "ScContactActionItems": u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] SELECT * FROM [192.168.0.74].[VirusScanProd].[dbo].[ScContactActionItems_xml]"; break; default: u_Mirror.CommandText = "Insert into [" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "] select * from [192.168.0.74].[" + mDataBase[cDataIndex] + "].[dbo].[" + Master_ds.Tables[0].Rows[i]["Name"].ToString() + "]"; break; } u_Mirror.ExecuteNonQuery(); //newLine(lCount.ToString(), mDataBase[cDataIndex], Master_ds.Tables[0].Rows[i]["Name"].ToString() // , MasterCount.ToString(), MirrorCount.ToString(), temp); } catch (Exception es) { MessageBox.Show(mDataBase[cDataIndex] + "\n" + es.Message + "\n" + DateTime.Now.ToString()); } } Master_Sqldapater.Dispose(); Mirror_Sqldapater.Dispose(); Master_ds.Dispose(); //Mirror_ds.Dispose(); u_Master.Dispose(); u_Mirror.Dispose(); conn_Master.Close(); conn_Mirror.Close(); conn_Master.Dispose(); conn_Mirror.Dispose(); cDataIndex += 1; if (cDataIndex > mDataBase.Length - 1) { ThreadState = 1; } SetText("Comparing Complete,continuing..."); SyncData(); //MessageBox.Show(cDataIndex.ToString()); SetText("Sync complete..."); } while (cDataIndex < mDataBase.Length); } } }
Config.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Database_tracking { public partial class Config : Form { private string configPath = Application.StartupPath + "\\config.ini"; /****操作INI文件开始***********/ [System.Runtime.InteropServices.DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 声明INI文件的读操作函数 GetPrivateProfileString() [System.Runtime.InteropServices.DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath); public string ReadValue(string section, string key) { // 每次从ini中读取多少字节 System.Text.StringBuilder temp = new System.Text.StringBuilder(255); // section=配置节,key=键名,temp=上面,path=路径 GetPrivateProfileString(section, key, "", temp, 255, configPath); return temp.ToString(); } public void Writue(string section, string key, string value) { // section=配置节,key=键名,value=键值,path=路径 WritePrivateProfileString(section, key, value, configPath); } /*****操作INI文件结束**********/ public Config() { InitializeComponent(); } private void Config_Load(object sender, EventArgs e) { MasterServer.Text = ReadValue("Main", "MasterServer"); MasterUid.Text = ReadValue("Main", "MasterUid"); MasterPwd.Text = ReadValue("Main", "MasterPwd"); MirrorServer.Text = ReadValue("Main", "MirrorServer"); MirrorUid.Text = ReadValue("Main", "MirrorUid"); MirrorPwd.Text = ReadValue("Main", "MirrorPwd"); ThreadCount.Text = ReadValue("Main", "ThreadCount"); Tables.Text = ReadValue("Main", "Library"); MyModel.MasterServer = MasterServer.Text; MyModel.MasterUid = MasterUid.Text; MyModel.MasterPwd = MasterPwd.Text; MyModel.MirrorServer = MirrorServer.Text; MyModel.MirrorUid = MirrorUid.Text; MyModel.MirrorPwd = MirrorPwd.Text; MyModel.Library = Tables.Text; MyModel.ThreadCount = ThreadCount.Text; } private void button1_Click(object sender, EventArgs e) { CheckValue(MasterServer.Text,MasterServer); CheckValue(MasterUid.Text,MasterUid); CheckValue(MasterPwd.Text,MasterPwd); CheckValue(MirrorServer.Text, MirrorServer); CheckValue(MirrorUid.Text, MirrorUid); CheckValue(MirrorPwd.Text, MirrorPwd); CheckValue(ThreadCount.Text, ThreadCount); CheckValue(Tables.Text, Tables); if (isNumeric(ThreadCount.Text) == false) { MessageBox.Show("This must enter a number"); ThreadCount.Focus(); } try { //Check True Writue("Main", "MasterServer", MasterServer.Text); Writue("Main", "MasterUid", MasterUid.Text); Writue("Main", "MasterPwd", MasterPwd.Text); Writue("Main", "MirrorServer", MirrorServer.Text); Writue("Main", "MirrorUid", MirrorUid.Text); Writue("Main", "MirrorPwd", MirrorPwd.Text); Writue("Main", "ThreadCount", ThreadCount.Text); Writue("Main", "Library", Tables.Text); MyModel.MasterServer = MasterServer.Text; MyModel.MasterUid = MasterUid.Text; MyModel.MasterPwd = MasterPwd.Text; MyModel.MirrorServer = MirrorServer.Text; MyModel.MirrorUid = MirrorUid.Text; MyModel.MirrorPwd = MirrorPwd.Text; MyModel.Library = Tables.Text; MyModel.ThreadCount = ThreadCount.Text; MessageBox.Show("Sucess!", "Info"); } catch(Exception es) { MessageBox.Show("Faled!Source: " + es.Message,"Info"); } } private void CheckValue(string s,TextBox m) { if (s.Trim() == "") { MessageBox.Show("The value of can not be empty"); m.Focus(); } } private bool isNumeric(string s) { try { int a = int.Parse(s); return true; } catch { return false; } } } }
MyModel.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Database_tracking { static class MyModel { public static string MasterServer = ""; public static string MasterUid = ""; public static string MasterPwd = ""; public static string MirrorServer = ""; public static string MirrorUid = ""; public static string MirrorPwd = ""; public static string Library = ""; public static string ThreadCount = ""; } }
config.ini
[Main] MasterServer=(local) MasterUid=sa MasterPwd=ericroback MirrorServer=(local) MirrorUid=sa MirrorPwd=ericroback ThreadCount=10 Library=myCIO,EcomKeys,FirewallProd,NAIPartners,ReportServer,ReportServerTempDB,RHSDB,SaaS_BusConfiguration,SiebelExtract,SiteAdvisorprod,SMSProd,TopsLogging,TPSClient,TrustedToken,VirusScanProd,VSDetections,VSSummary
完整代码请点击:http://download.csdn.net/detail/robake/4701086
相关文章推荐
- 如何对数据库管理工具选项卡进行偏好设置
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- 利用PyCharm的Profile工具进行Python性能分析
- phpTrace 奇虎360开源的PHP脚本跟踪分析工具
- 使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库
- SQL SERVER:使用工具观察与分析数据库中锁信息
- Android内存优化之——static使用篇(使用MAT工具进行分析)
- 深入分析JavaWeb 28 -- 使用JDBC对数据库进行CRUD
- 万能数据库查询分析器与EXCEL强强联合进行数据分析
- HTTP协议版本介绍以及使用Wireshark工具针对HTTP进行抓包分析详解
- linux下利用valgrind工具进行内存泄露检测和性能分析
- 对网页游戏《卧龙吟》的分析2----- 采用工具对预登陆flash进行逆向获取源代码
- 使用SQL Server Profiler分析器进行数据库的跟踪
- hadoop(为什么不能使用数据库来对大量磁盘上的大规模数据进行分析呢,为什么要用MapReduce)
- linux下利用valgrind工具进行内存泄露检测和性能分析
- [MySQL 工具] pt-index-usage使用 --> 对查询中的索引进行分析
- Collections集合静态工具可以让非同步进行同步操作的源码分析
- Vs2005之简单日志工具的制作--2.根据功能分析进行系统设计
- 用MySQL的mysqldump工具对数据库进行导出和导入
- 利用工具进行数据库数据的复杂查询 [转]