문제

얼마나 걸리는 실행

ALTER DATABASE [MySite] SET READ_COMMITTED_SNAPSHOT ON

나는 그냥 그것을 실행하고 그것을 촬영하고 10 분입니다.

어떻게 확인할 수 있습니다면 그것이 적용됩니까?

도움이 되었습니까?

해결책

당신은 sys.databases 보다. 값을 확인하십시오 is_read_committed_snapshot_on 열. 이미 물었고 대답했습니다.

기간에 관해서는 온라인 도서에 따르면 데이터베이스가 발생할 때 데이터베이스와의 다른 연결이 없지만 단일 사용자 모드가 필요하지 않다고 명시되어 있습니다. 따라서 다른 활성 연결에 의해 차단 될 수 있습니다. 운영 sp_who (또는 sp_who2) 해당 데이터베이스에 연결된 것이 무엇인지 확인합니다.

다른 팁

이 시도:

ALTER DATABASE generic SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE

확인(난 원래 질문자)그런데 이 모든 시간이 나지 않았더라도 있는 것은 사용됩니다.

궁극적 코드 을 실행하는 사용하려면 스냅샷 모드인지 확인하십시오 활성화됩니다.

SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'

ALTER DATABASE shipperdb SET allow_snapshot_isolation ON
ALTER DATABASE shipperdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE shipperdb SET read_committed_snapshot ON
ALTER DATABASE shipperdb SET MULTI_USER

SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'

이 작품으로도 연결이 활동(아마도 당신은 잘 그들과 함께 받고 쫓겨).

당신이 볼 수 있습 전후의 상태 및 이행해야 한다 거의 즉시 나오게된다.


중요:

옵션객이 위에 해당하 IsolationLevel.ReadCommitted 습니다.NET
옵션 ALLOW_SNAPSHOT_ISOLATION 위에 해당하 IsolationLevel.스냅니다.NET

훌륭한 문서에 대해 다른 버전 관리


.NET Tips:

Isolationlevel.ReadCommitted 이 허용되는 코드에서는 경우에도 사용할 수 있도록 설정되지 않습니다.경고가 발생합니다.그래서 자신에게 부탁을 해야 그것이 켜져 있다고 가정하기 전에 그것은 3 년 동안 다음과 같았다!!!

당신은 C#을 사용하여 당신은 아마 원 ReadCommitted IsolationLevel 지 Snapshot -을 하지 않는다면 쓰기에서이 트랜잭션이 있습니다.

READ COMMITTED SNAPSHOT 는 낙관적인 읽기 및 비관적 씁니다.반면에, SNAPSHOT 는 낙관적인 읽기와 낙관적 인 기록합니다. (여기서부터)

bool snapshotEnabled = true;

using (var t = new TransactionScope(TransactionScopeOption.Required,
               new TransactionOptions
{
     IsolationLevel = IsolationLevel.ReadCommitted
}))
{
     using (var shipDB = new ShipperDBDataContext())
     {

     }
}

에서 추가적인 오류가 발생할 수 있습에 대한되는'할 수 없습을 촉진하는'트랜잭션이 있습니다.검색에 대한의 승진에' 을 소개하는 시스템.트랜잭션에서.NET Framework2.0.

지 않는 한 당신이 하고 있는 특별한 무언가를 연결하는 것과 같은 외부 데이터베이스(또는 두 번째 데이터베이스)다음으로 간단하게 뭔가가 새로 만드는 매핑되는이 발생할 수 있습니다.가 캐시에는'회전'그 자체에 매핑되는 초기화 및 이 노력하고 확대해 거래가 전체되 하나입니다.

해결책은 간단하다:

        using (var tran = new TransactionScope(TransactionScopeOption.Suppress))
        {
            using (var shipDB = new ShipperDBDataContext())
            { 
                 // initialize cache
            }
        }

또한 참조 Deadlocked 제 by@CodingHorror

이 코드를 시도하십시오 :

if(charindex('Microsoft SQL Server 2005',@@version) > 0)
begin
    declare @sql varchar(8000)
    select @sql = '
    ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
    ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
    ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'

    Exec(@sql)
end

나는 명령을 시도했다 :

ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
GO

개발자 상자에 대비했지만 10 분 이상이 걸렸으므로 죽였습니다.

그런 다음 이것을 찾았습니다.

https://willwarren.com/2015/10/12/sql-server-read-committed-snapshot/

그의 코드 블록을 사용했습니다 (실행하는 데 약 1:26이 걸렸습니다).

USE master
GO

/** 
 * Cut off live connections
 * This will roll back any open transactions after 30 seconds and
 * restricts access to the DB to logins with sysadmin, dbcreator or
 * db_owner roles
 */
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK AFTER 30 SECONDS
GO

-- Enable RCSI for MyDB
ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
GO

-- Allow connections to be established once again
ALTER DATABASE MyDB SET MULTI_USER
GO

-- Check the status afterwards to make sure it worked
SELECT is_read_committed_snapshot_on
FROM sys.databases
WHERE [name] = 'MyDB '

현재 데이터베이스를 변경하기 전에 마스터 데이터베이스를 사용해보십시오.

USE Master
GO

ALTER DATABASE [YourDatabase] SET READ_COMMITTED_SNAPSHOT ON
GO

DB를 단일 사용자로 변경했을 때 1 초가 걸리지 않았습니다.

SQL Server 서비스 만 실행되도록 다른 SQL 서비스를 종료 해보십시오.

광산은 5 분 동안 달렸다가 아무 일도 일어나지 않았기 때문에 취소했습니다. 새로운 서버이므로 다른 사용자가 연결되어 있지 않습니다. SQL보고 서비스를 종료 한 다음 다시 실행했습니다. 완료하는 데 1 초도 채 걸리지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top