关于SqlServer数据库C盘占用空间太大问题

本文介绍了一种在SQL Server 2008环境下优化Tempdb的方法,包括如何通过更改Tempdb的增长方式及迁移其存储位置来减少磁盘空间占用。


        工程需要用上了SQL SERVER2008 ,主要作为数据仓库使用,使用SSIS包从ORACEL10G中抽取数据到MS SQL中。环境是win2003x64的,驱动使用的oracle10gX64。使用半年后发现服务器C盘还剩不到1G(总大小50G,软件只有ORACLE 客户端,SQL SERVER),后来排除文件时发现C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\tempdb.mdf 这个文件有37G,这个是临时的数据库,是用来存放临时表的。是因为SSIS包程序和存储过程中经常性使用插入或者更新数据导致的。这种情况可以使用收缩了数据库,然后是把增长方式改为以M增长的方式解决。并且将该数据库迁移到另外一个盘下面:

一、迁移SqlServer数据库中的tempdb.mdf。

将 tempdb 从其在磁盘上的当前位置移动到其他磁盘位置。由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此不需要从物理意义上移动数据和日志文件。

1 确定 tempdb 数据库的逻辑文件名称以及在磁盘上的当前位置。
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
GO
2使用 ALTER DATABASE 更改每个文件的位置
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLData\templog.ldf');
GO
3停止并重新启动 SQL Server。
4验证文件更改。
SELECT name, physical_name
FROM sys.master_files

WHERE database_id = DB_ID('tempdb');


二、临时性解决这个问题可以采取定期重启服务器的方式解决



### SQL Server大数据量导出Excel的方法与工具 在处理SQL Server中数据量较大的表时,将数据导出到Excel是一项常见需求。以下是几种有效的方法和工具,能够满足不同场景下的需求。 #### 方法一:使用hpctb工具 hpctb是一款高效的工具,支持一键导出亿级SQL Server表到多个Excel文件[^1]。其操作流程简单直观: 1. 点击“数据表导入和导出”,选择“mssql”,输入服务器名称、用户名和密码,选择目标数据库。 2. 选中需要导出的表,点击向右箭头将其添加到操作列表。 3. 点击“导出电子表”,选择保存路径并输入文件名。 4. 工具会自动将数据按100万行分割为多个Excel文件,并保存到指定目录。 此方法的优点在于内存占用低,适合处理百亿级数据,只需硬空间足够即可完成任务。 #### 方法二:使用Python脚本 Python结合`pyodbc`和`openpyxl`库,可以实现SQL Server表数据的灵活导出[^2]。以下是一个示例代码: ```python import pyodbc from openpyxl import Workbook # 连接SQL Server conn = pyodbc.connect('DRIVER={SQL Server};SERVER=your_server;DATABASE=your_db;UID=your_user;PWD=your_password') cursor = conn.cursor() # 查询数据 query = "SELECT * FROM your_table" cursor.execute(query) # 创建Excel工作簿 wb = Workbook() ws = wb.active # 写入表头 columns = [column[0] for column in cursor.description] ws.append(columns) # 写入数据 batch_size = 100000 # 每次读取10万行 rows = cursor.fetchmany(batch_size) while rows: for row in rows: ws.append([cell for cell in row]) rows = cursor.fetchmany(batch_size) # 保存Excel文件 wb.save("output.xlsx") ``` 这种方法适合需要自定义导出逻辑的场景,例如分批写入以减少内存消耗。 #### 方法三:使用BCP命令 BCP(Bulk Copy Program)是SQL Server自带的命令行工具,能够高效导出海量数据到文件[^3]。以下是一个示例命令: ```bash bcp "SELECT * FROM your_database.dbo.your_table" queryout output.xls -c -q -S"your_server" -U"your_user" -P"your_password" ``` 该方法通过命令行直接操作,无需额外安装软件,适用于批量任务或定时任务。 #### 方法四:使用SQL Server Management Studio (SSMS) 虽然SSMS在导出大数据量时性能有限,但可以通过调整策略来优化: 1. 使用“导出数据”向导,选择目标为“Microsoft Excel”。 2. 在高级选项中设置批次大小,避免一次性加载过多数据。 3. 对于超大数据量,建议分批次导出到多个文件。 --- ### 注意事项 - **性能优化**:对于大数据量导出,建议分批次处理,以降低内存压力。 - **文件格式**:Excel单个工作表的最大行数为1,048,576行,因此需根据数据量合理分割文件。 - **工具选择**:根据实际需求选择合适的工具,hpctb适合快速操作,Python脚本适合定制化场景,BCP适合批量任务。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值