0

膨大な数のデータをデータベースに更新/挿入しようとしています

私は次のコードを使用しています:

using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = storedProcedureName;
                command.UpdatedRowSource = UpdateRowSource.None;

                foreach (SqlParameter sqlParameter in sqlParameters)
                    command.Parameters.Add(sqlParameter);


                var adapter = new SqlDataAdapter();
                adapter.InsertCommand = command;
                adapter.UpdateBatchSize = batchSize;

                return adapter.Update(table);
            }

そして、私は次のストアドプロシージャを使用しています:

    @shareAdGroupId int,
@groupPermissionName varchar(100)

AS
BEGIN transaction
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.@permissionTypeName

    declare @permissionId int
    EXEC  [dbo].[PROC_UPSERT_PERMISSION] @permissionName = @groupPermissionName,  @permissionId = @permissionId OUTPUT


    SET NOCOUNT ON;
        BEGIN TRY
        begin
            INSERT INTO [dbo].SHARE_AD_GROUP_PERMISSION
           (SHARE_AD_GROUP_ID,PERMISSION_ID)
        VALUES
           (@shareAdGroupId,@permissionId)
        end
    END TRY
    BEGIN CATCH
        --RETURN ERROR_MESSAGE() 
    END CATCH
commit transaction

乱数のレコードを挿入/更新した後、エラーが発生します:

System.Data.SqlClient.SqlException: データベース 'dbName' のトランザクション ログがいっぱいです。ログ内のスペースを再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc 列を参照してください。

この質問が何度も寄せられていることは知っていますが、更新/挿入の方法が問題を引き起こしているかどうかを調べるために検索しました。

私は DBA ではなく、db サーバーに対する権限がないため、バックアップ ログを変更することはできませんが、問題がそれだけであるかどうかはあまり気にしません。次に、これを解決するのは dba 次第です。

私の質問は、コーディングの部分で、何か間違ったことをしているのですか?どうにかしてそれを改善できますか?

ありがとう

4

1 に答える 1

2

いいえ、このエラーはDBA側でのみ修正可能であるため、権限なしで実際に実行できることは何もありません。ディスクが存在するボリュームの容量が不足しているか、ログファイルがクォータに達しているか、ログファイルの自動拡張が正しく設定されていません。

于 2013-03-15T21:47:12.807 に答える