우리는 표준 SqlMembershipProvider를 사용하는 작은 웹 사이트를 실행하며 표준 CreateUserWizard가 있습니다. 잠금 리소스를 다른 프로세스에 교착트랜잭션 교착 상태 SqlMembershipProvider.CreateUser()
트랜잭션 (프로세스 ID XX) 및 교착 상태로 선택되었습니다
우리는 처리되지 않은 예외를 얻었다. 트랜잭션을 재실행하십시오.스택 추적
System.Web.Security.SqlMembershipProvider이다. createuser가
System.Web.UI.WebControls.CreateUserWizard (문자열 이름, 문자열 암호, 문자열 이메일은 문자열 passwordQuestion, 문자열 passwordAnswer, 부울 isApproved는 providerUserKey, MembershipCreateStatus & 상태 개체). AttemptCreateUser()
어떤 문제를 해결하는 방법?
ALTER PROCEDURE [dbo].[aspnet_Membership_CreateUser]
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@Password nvarchar(128),
@PasswordSalt nvarchar(128),
@Email nvarchar(256),
@PasswordQuestion nvarchar(256),
@PasswordAnswer nvarchar(128),
@IsApproved bit,
@CurrentTimeUtc datetime,
@CreateDate datetime = NULL,
@UniqueEmail int = 0,
@PasswordFormat int = 0,
@UserId uniqueidentifier OUTPUT
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
DECLARE @NewUserId uniqueidentifier
SELECT @NewUserId = NULL
DECLARE @IsLockedOut bit
SET @IsLockedOut = 0
DECLARE @LastLockoutDate datetime
SET @LastLockoutDate = CONVERT(datetime, '17540101', 112)
DECLARE @FailedPasswordAttemptCount int
SET @FailedPasswordAttemptCount = 0
DECLARE @FailedPasswordAttemptWindowStart datetime
SET @FailedPasswordAttemptWindowStart = CONVERT(datetime, '17540101', 112)
DECLARE @FailedPasswordAnswerAttemptCount int
SET @FailedPasswordAnswerAttemptCount = 0
DECLARE @FailedPasswordAnswerAttemptWindowStart datetime
SET @FailedPasswordAnswerAttemptWindowStart = CONVERT(datetime, '17540101', 112)
DECLARE @NewUserCreated bit
DECLARE @ReturnValue int
SET @ReturnValue = 0
DECLARE @ErrorCode int
SET @ErrorCode = 0
DECLARE @TranStarted bit
SET @TranStarted = 0
IF(@@TRANCOUNT = 0)
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END
ELSE
SET @TranStarted = 0
EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @ApplicationId OUTPUT
IF(@@ERROR <> 0)
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
SET @CreateDate = @CurrentTimeUtc
SELECT @NewUserId = UserId FROM dbo.aspnet_Users WHERE LOWER(@UserName) = LoweredUserName AND @ApplicationId = ApplicationId
IF (@NewUserId IS NULL)
BEGIN
SET @NewUserId = @UserId
EXEC @ReturnValue = dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, 0, @CreateDate, @NewUserId OUTPUT
SET @NewUserCreated = 1
END
ELSE
BEGIN
SET @NewUserCreated = 0
IF(@NewUserId <> @UserId AND @UserId IS NOT NULL)
BEGIN
SET @ErrorCode = 6
GOTO Cleanup
END
END
IF(@@ERROR <> 0)
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF(@ReturnValue = -1)
BEGIN
SET @ErrorCode = 10
GOTO Cleanup
END
IF (EXISTS (SELECT UserId
FROM dbo.aspnet_Membership
WHERE @NewUserId = UserId))
BEGIN
SET @ErrorCode = 6
GOTO Cleanup
END
SET @UserId = @NewUserId
IF (@UniqueEmail = 1)
BEGIN
IF (EXISTS (SELECT *
FROM dbo.aspnet_Membership m WITH (UPDLOCK, HOLDLOCK)
WHERE ApplicationId = @ApplicationId AND LoweredEmail = LOWER(@Email)))
BEGIN
SET @ErrorCode = 7
GOTO Cleanup
END
END
IF (@NewUserCreated = 0)
BEGIN
UPDATE dbo.aspnet_Users
SET LastActivityDate = @CreateDate
WHERE @UserId = UserId
IF(@@ERROR <> 0)
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
END
INSERT INTO dbo.aspnet_Membership
(ApplicationId,
UserId,
Password,
PasswordSalt,
Email,
LoweredEmail,
PasswordQuestion,
PasswordAnswer,
PasswordFormat,
IsApproved,
IsLockedOut,
CreateDate,
LastLoginDate,
LastPasswordChangedDate,
LastLockoutDate,
FailedPasswordAttemptCount,
FailedPasswordAttemptWindowStart,
FailedPasswordAnswerAttemptCount,
FailedPasswordAnswerAttemptWindowStart)
VALUES (@ApplicationId,
@UserId,
@Password,
@PasswordSalt,
@Email,
LOWER(@Email),
@PasswordQuestion,
@PasswordAnswer,
@PasswordFormat,
@IsApproved,
@IsLockedOut,
@CreateDate,
@CreateDate,
@CreateDate,
@LastLockoutDate,
@FailedPasswordAttemptCount,
@FailedPasswordAttemptWindowStart,
@FailedPasswordAnswerAttemptCount,
@FailedPasswordAnswerAttemptWindowStart)
IF(@@ERROR <> 0)
BEGIN
SET @ErrorCode = -1
GOTO Cleanup
END
IF(@TranStarted = 1)
BEGIN
SET @TranStarted = 0
COMMIT TRANSACTION
END
RETURN 0
Cleanup:
IF(@TranStarted = 1)
BEGIN
SET @TranStarted = 0
ROLLBACK TRANSACTION
END
RETURN @ErrorCode
END
감사 :
이 SQL 쿼리는 표준 것입니다!
트랜잭션 교착 상태는 리소스에 대한 많은 경쟁이 예상되지 않는 "작은 웹 사이트"에서는 일반적이지 않습니다. 이 게시물이 직면하고있는 문제에 대해 더 많은 것을 밝힐 수 있는지 확인하십시오. http://social.msdn.microsoft.com/forums/en-US/sqldatabaseengine/thread/e0210b4f-61c4-41f3-a573-c5fe7ac33b5e –
리소스 경쟁 내 의견으로는 트래픽과 관련이 없지만 프로그래밍 된 웹 페이지가 얼마나 심한가. 스레드가 말하는 그래픽을 얻으려고합니다. – BCartolo