相关疑难解决方法(0)

Sql Server 2008调整大事务(700k +行/事务)

所以,我正在研究一个数据库,我将把它作为一个支持数据库添加到我未来的项目中,但我遇到了一些问题,特别是日志.

数据库基本上每月需要更新一次.必须清除主表,然后重新填充CSV文件.问题是Sql Server会为它生成一个MEGA大的日志.我成功填写了一次,但想通过清洗然后重新填充它来测试整个过程.

那是我收到日志文件填满的错误.它从88MB(通过维护计划收缩后)跳到248MB,然后完全停止该过程并且永远不会完成.

我把它的增长限制在256MB,增加了16MB,这就是它失败的原因,但实际上我根本不需要它来记录任何东西.有没有办法完全绕过对数据库运行的任何查询的日志记录?

感谢提前回复!

编辑:根据@ mattmc3的建议我已经为整个过程实现了SqlBulkCopy.它工作令人惊讶,除了我的循环以某种方式崩溃在最后剩下的需要插入的块上.我不太确定我哪里出错了,我甚至不知道这是不是一个合适的循环,所以我很感激它的一些帮助.

我知道它是最后一个GetDataTable或SetSqlBulkCopy调用的问题.我正在尝试插入788189行,788000进入,其余189个崩溃...

string[] Rows;

using (StreamReader Reader = new StreamReader("C:/?.csv")) {
    Rows = Reader.ReadToEnd().TrimEnd().Split(new char[1] {
        '\n'
     }, StringSplitOptions.RemoveEmptyEntries);
};

int RowsInserted = 0;

using (SqlConnection Connection = new SqlConnection("")) {
    Connection.Open();

    DataTable Table = null;

    while ((RowsInserted < Rows.Length) && ((Rows.Length - RowsInserted) >= 1000)) {
        Table = GetDataTable(Rows.Skip(RowsInserted).Take(1000).ToArray());

        SetSqlBulkCopy(Table, Connection);

        RowsInserted += 1000;
    };

    Table = GetDataTable(Rows.Skip(RowsInserted).ToArray());

    SetSqlBulkCopy(Table, Connection);

    Connection.Close();
};

static DataTable GetDataTable(
    string[] Rows) {
    using (DataTable Table …
Run Code Online (Sandbox Code Playgroud)

logging sql-server-2008

5
推荐指数
1
解决办法
929
查看次数

标签 统计

logging ×1

sql-server-2008 ×1