介绍
在大型网络环境中,网络管理员可能需要定期监控网络性能、安全和稳定性。常见的数据库之一是Microsoft SQL Server(MSSQL),在监测网络时,该数据库通常会涉及其日志文件和表格。本文将介绍如何使用跨平台的透明网管连接MSSQL,以通过Web应用程序查询数据库并获得实时更新,同时对这些连接进行监控。
什么是透明网管连接?
透明网管连接是指在不干扰现有网络架构的情况下,从远程地访问网络节点。在本文中,我们从远程设备(以管理员身份)访问MSSQL数据库并从Web应用程序获得实时更新。
建立透明网管连接
STEP 1: 安装SQL Server
首先,我们需要在远程设备上安装SQL Server。以下是Windows和Linux系统上安装MSSQL Server的说明。
Linux
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
yum remove unixODBC-utf16 unixODBC-utf16-devel #running into error importing keys?
yum install msodbcsql-13.1.9.2-1 mssql-server
sudo /opt/mssql/bin/mssql-conf setup
systemctl status mssql-server
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
Windows
请按以下步骤在Windows上安装MSSQL Server:
从MSSQL官网下载MSSQL Server安装程序。
下载完成后,运行它并按照屏幕上显示的指示进行安装。
完成后,启动MSSQL服务并创建一个数据库实例。
STEP 2: 配置SQL Server
在远程设备上安装SQL Server后,需要配置SQL Server以向外界公开端口。以下是在Windows和Linux中配置MSSQL Server以启用与远程连接的说明。
Linux
打开端口1433,更改MSSQL Server配置以允许远程访问。
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo systemctl restart firewalld
sudo firewall-cmd --zone=public --list-ports
sudo systemctl restart mssql-server
sudo systemctl status mssql-server
Windows
在Windows上,我们需要打开防火墙端口1433,以允许远程连接到MSSQL Server。
打开防火墙高级安全。
在左侧栏中选择'入站规则'。
点击'新建规则'。
选择'TCP端口',然后点击'下一步'。
在'特定本地端口'字段中输入'1433','允许连接'选项已被选中,然后点击'下一步'。
在'范围'页面中,选择'任何IP地址',然后点击'下一步'。
选择'允许连接',然后点击'下一步'。
为该规则指定名称并完成向导。
STEP 3: 建立网络连接
若在远程设备上已经安装了Java并且想从Java应用程序中访问MSSQL Server,则需按照以下步骤建立网络连接:
下载SQL Server JDBC驱动器。
将该驱动器放置在Java CLASSPATH环境变量所指向的目录中。
定义数据库连接字符串以应用于Java代码中。
public static void main(String args[]) throws SQLException {
Connection con = null;
String url = "jdbc:sqlserver://<Server>:<PortNumber>;databaseName=<DBName>;user=<UserName>;password=<Password>";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url);
System.out.println("Connection Successful!");
} catch (Exception e) {
e.printStackTrace();
} finally {
con.close();
}
}
在Java应用程序中使用SQL查询语言
Java提供了许多库可供操作与SQL Server中的表格数据交互。
STEP 1: 编写查询语言
查询语言是用于从数据库中检索表格数据的语言。我们将编写以下SQL语句检索数据库中的所有数据:
SELECT * FROM <TableName>
STEP 2: 编写Java代码
Java应用程序将使用JDBC库来执行SQL语句并检索数据库中的数据。以下是一个简单的Java应用程序示例:
public class SQLConnection {
public static void main(String[] args) {
// Create a variable for the connection string
String connectionUrl = "jdbc:sqlserver://<server>:<port>;database=<database>;user=<user>;password=<password>";
// Declare the JDBC objects.
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
// Establish the connection.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
// Create and execute an SQL statement that returns some data.
String SQL = "SELECT * FROM <TableName>";
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
}
// Handle errors
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (con != null) con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
在Java应用程序中使用SQL Server的日志信息
SQL Server的日志信息包含在SQL Server中,这可以通过编写查询语言来获得。以下是查询MSSQL Server中的日志信息的示例SQL语句:
USE master;
GO
EXEC xp_readerrorlog;
现在,我们需要将此查询语句嵌入到Java应用程序中。以下是此操作的Java代码示例:
public class SQLLogExample {
public static void main(String[] args) {
String connectionUrl = "jdbc:sqlserver://<server>:<port>;database=<database>;user=<user>;password=<password>";
Connection connection = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
connection = DriverManager.getConnection(connectionUrl);
String selectMethod = "USE master;\n" +
"EXEC xp_readerrorlog";
stmt = connection.prepareStatement(selectMethod);
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在Java应用程序中使用SQL Server的实时信息
MSSQL Server还提供了可以通过编写一系列查询语句来获取实时信息的程序。以下是查询MSSQL Server中的实时信息的示例SQL语句:
SELECT * FROM sys.dm_os_performance_counters
现在,我们需要在Java应用程序中将此查询语句嵌入,并在Web应用程序中显示实时更新。以下是向Web应用程序提供连续实时更新的程序示例:
public class PerformanceDataUpdater implements Runnable {
private ConcurrentHashMap<String, PerformanceData> data = null;
private RemoteMssqlDBConnection mssqlConnection;
public PerformanceDataUpdater(RemoteMssqlDBConnection dbConnection, String[] counterGroups){
this.data = new ConcurrentHashMap<String, PerformanceData>();
for(int i = 0; i<counterGroups.length; i++){
this.data.put(counterGroups[i], new PerformanceData());
}
this.mssqlConnection = dbConnection;
}
@Override
public void run() {
try {
ResultSet rs = mssqlConnection.getResultsetFromQuery(
"SELECT * FROM sys.dm_os_performance_counters");
while(rs.next()){
String counter = rs.getString(1);
String value = rs.getString(4);
PerformanceData pData = this.data.get(counter);
if( pData != null)
pData.addData(new PerformanceDataPoint(Long.parseLong(value)));
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public ConcurrentHashMap<String, PerformanceData> getData(){
return this.data;
}
}
总结
在本文中,我们向您介绍了如何安装MSSQL Server、配置网络连接并从Java应用程序中使用该数据库的各种功能。我们介绍了如何获取其日志信息、查询表格数据以及如何提供实时更新以在Web应用程序中使用。