膨大な数のデータをデータベースに更新/挿入しようとしています
私は次のコードを使用しています:
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 次第です。
私の質問は、コーディングの部分で、何か間違ったことをしているのですか?どうにかしてそれを改善できますか?
ありがとう