Sqlserver 資料庫檔案大小和剩餘空間
在MS Sql Server中可通過以下的方法查詢出磁碟空間的使用情況及各資料庫資料檔案及日誌檔案的大小及使用利用率:
1、查詢各個磁碟分割槽的剩餘空間:
Exec master.dbo.xp_fixeddrives;
2、查詢資料庫中的所有資料庫名:
SELECT Name FROM Master..SysDatabases ORDER BY Name;
3、查詢某個資料庫中所有的表名:
SELECT name FROM SysObjects Where XType=’U’ ORDER BY Name;
4、查詢資料庫的資料檔案及日誌檔案的相關資訊(包括檔案組、當前檔案大小、檔案最大值、檔案增長設定、檔案邏輯名、檔案路徑等)
select * from [資料庫名].[dbo].[sysfiles];
轉換檔案大小單位為MB:
select name, convert(float,size) * (8192.0/1024.0)/1024. from [資料庫名].dbo.sysfiles;
5、查詢當前資料庫的磁碟使用情況:
Exec sp_spaceused;
exec sp_spaceused ‘表名’; –取得表佔用空間
6、查詢資料庫伺服器各資料庫日誌檔案的大小及利用率
DBCC SQLPERF(LOGSPACE);
7、收縮資料庫日誌檔案(sql server2005)
backup log [資料庫名] with no_log
DBCC SHRINKDATABASE(N’[資料庫名]’, 15, TRUNCATEONLY)
8、收縮資料庫日誌檔案(sql server2008)
USE[master]
GO
ALTER DATABASE [資料庫名] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [資料庫名] SET RECOVERY SIMPLE –簡單模式
GO
USE [資料庫名]
GO
DBCC SHRINKFILE (N’[資料庫名]_Log’ , 11, TRUNCATEONLY)
GO
USE[master]
GO
ALTER DATABASE [資料庫名] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [資料庫名] SET RECOVERY FULL –還原為完全模式
GO
9、獲取分析資料庫中各表大小的程式碼示例
IrisAppDBConn dbConn = new IrisAppDBConn();
ResultSet rs = null;
try {
List<String> list = new ArrayList<String>();
String sql = "SELECT name FROM SysObjects Where XType='U' ORDER BY Name";
rs = dbConn.getResultBySql(sql);
while (rs.next()) {
list.add (rs.getString("name"));
}
for (int i = 0; i < list.size(); i++) {
sql = "exec sp_spaceused '" + list.get(i) + "'";
rs = dbConn.getResultBySql(sql);
if (rs.next()) {
// name,rows,reserved,data,index_size,unused
System.out.println(rs.getString("name") + "\t" + rs.getString("rows") + "\t" + rs.getString("reserved") + "\t" + rs.getString("data") + "\t" + rs.getString("index_size") + "\t" + rs.getString("unused") + "\t");
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
dbConn.close();
}