ReadOnly 모드와 ReadWrite 모드 간 Analysis Services 데이터베이스 전환
Analysis Services DBA(데이터베이스 관리자)가 데이터베이스의 읽기/쓰기 모드를 변경해야 하는 경우가 종종 있습니다. 대개 사용자 경험 개선을 위해 Analysis Services 서버의 풀에서 데이터베이스를 공유하는 것과 같은 비즈니스 요구 사항에 따라 데이터베이스의 읽기/쓰기 모드를 변경합니다.
데이터베이스 모드는 여러 가지 방법으로 전환할 수 있습니다. 이 문서에서는 다음과 같은 일반적인 시나리오에 대해 설명합니다.
SQL Server Management Studio를 사용하여 대화식으로 전환
AMO를 사용하여 프로그래밍 방식으로 전환
XMLA를 사용하여 스크립트로 전환
절차
Management Studio를 사용하여 데이터베이스의 읽기/쓰기 모드를 대화식으로 전환하려면
Management Studio의 왼쪽 또는 오른쪽 창에서 전환할 데이터베이스를 찾습니다.
데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다. 데이터베이스 폴더를 찾은 후 위치를 확인합니다. 빈 데이터베이스 저장소 위치는 데이터베이스 폴더가 서버 데이터 폴더에 있음을 나타냅니다.
중요 데이터베이스를 분리하면 즉시 Management Studio를 사용하여 데이터베이스 위치를 찾을 수 없게 됩니다.
데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 **분리…**를 선택합니다.
분리되는 데이터베이스에 암호를 할당한 후 확인을 클릭하여 분리 명령을 실행합니다.
Management Studio의 왼쪽 또는 오른쪽 창에서 데이터베이스 폴더를 찾습니다.
데이터베이스 폴더를 마우스 오른쪽 단추로 클릭하고 **연결...**을 선택합니다.
폴더 입력란에 데이터베이스 폴더의 원래 위치를 입력합니다. 또는 찾아보기 단추(…)를 사용하여 데이터베이스 폴더를 찾을 수 있습니다.
데이터베이스의 읽기/쓰기 모드를 선택합니다.
3단계에 사용한 암호를 입력하고 확인을 클릭하여 연결 명령을 실행합니다.
AMO를 사용하여 데이터베이스의 읽기/쓰기 모드를 프로그래밍 방식으로 전환하려면
- C# 응용 프로그램에 다음 예제 코드를 적용하고 표시되는 태스크를 완료합니다.
private void SwitchReadWrite(Server server, string dbName,
ReadWriteMode dbReadWriteMode)
{
if (server.Databases.ContainsName(dbName))
{
Database db;
string databaseLocation;
db = server.Databases[dbName];
databaseLocation = db.DbStorageLocation;
if (databaseLocation == null)
{
string dataDir = server.ServerProperties["DataDir"].Value;
String[] possibleFolders = Directory.GetDirectories(dataDir, string.Concat(dbName,"*"), SearchOption.TopDirectoryOnly);
if (possibleFolders.Length > 1)
{
List<String> sortedFolders = new List<string>(possibleFolders.Length);
sortedFolders.AddRange(possibleFolders);
sortedFolders.Sort();
databaseLocation = sortedFolders[sortedFolders.Count - 1];
}
else
{
databaseLocation = possibleFolders[0];
}
}
db.Detach();
server.Attach(databaseLocation, dbReadWriteMode);
}
}
C# 응용 프로그램에서 필요한 매개 변수를 사용하여 SwitchReadWrite()를 호출합니다.
코드를 컴파일하고 실행하여 데이터베이스를 이동합니다.
XMLA를 사용하여 스크립트로 데이터베이스의 읽기/쓰기 모드를 전환하려면
Management Studio의 왼쪽 또는 오른쪽 창에서 전환할 데이터베이스를 찾습니다.
데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다. 데이터베이스 폴더를 찾은 후 위치를 확인합니다. 빈 데이터베이스 저장소 위치는 데이터베이스 폴더가 서버 데이터 폴더에 있음을 나타냅니다.
중요 데이터베이스를 분리하면 즉시 Management Studio를 사용하여 데이터베이스 위치를 찾을 수 없게 됩니다.
Management Studio에서 새 XMLA 탭을 엽니다.
다음 XMLA 스크립트 템플릿을 복사합니다.
<Detach xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>%dbName%</DatabaseID>
<Password>%password%</Password>
</Object>
</Detach>
%dbName%은 데이터베이스 이름으로 대체하고 %password%는 암호로 대체합니다. % 문자는 템플릿의 일부이므로 제거해야 합니다.
XMLA 명령을 실행합니다.
다음 XMLA 스크립트 템플릿을 새 XMLA 탭에 복사합니다.
<Attach xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Folder>%dbFolder%</Folder>
<ReadWriteMode xmlns="https://schemas.microsoft.com/analysisservices/2008/engine/100">%ReadOnlyMode%</ReadWriteMode>
</Attach>
%dbFolder%는 데이터베이스 폴더의 전체 UNC 경로로 대체하고 %ReadOnlyMode%는 해당 값(ReadOnly 또는 ReadWrite)으로, %password%는 암호로 대체합니다. % 문자는 템플릿의 일부로 제거해야 합니다.
XMLA 명령을 실행합니다.
참고 항목
참조
Attach()()()()