2013-02-17 9 views
3

그래서 우리는 전체 SQL Server 설치 프로그램을 실행 및 종료 한 암호화 된 데이터베이스를 사용했습니다. 우리의 데이터에 대해 불만을 나타 냈지만 우리는 Git에서 데이터 구조/저장된 Procs/함수를 가질만큼 똑똑했습니다..sql 파일에서 SQL Server 데이터베이스 복원

문제는 파일이 .sql 개로 저장된다는 것입니다.

이 파일들로 가득 찬 디렉토리에서 스키마를 일괄 적으로 복원 할 수있는 방법이 있습니까?

나는 주변을 둘러 보았고 .bak 파일 또는 .mdf의 파일 만 복원 할 수있는 자습서를 찾을 수 있습니다. 이것은 게으른 사람의 방법이 아닙니다. 단지 해결책을 빨리 찾아야합니다. 모든 조언이나 자원/어떤 것도 크게 감사하겠습니다. 개별적으로 각 파일을 실행

감사 인터 웹,

딜런 I 복원하려고했던 데이터 구조의 큰 크기를 고려

+3

(1) SQL 서버를 다시 가동하고 (2) 적절한 매개 변수 (크기 등)를 사용하여 데이터베이스를 만든 다음 (3) '.sql' 스크립트를 차례로 실행해야합니다. 그 새로운 데이터베이스 –

+0

배치 솔루션을 더 찾고있었습니다. 그러나 sqlcmd를 사용하는 것이 핵심 인 것 같습니다. 완료되면 솔루션을 게시하십시오 –

+3

데이터베이스에 대한 백업 파일이 없습니까? 시스템 데이터베이스 포함? –

답변

1

는 실용적인 솔루션이 아니었다. 나는 박쥐 헛소리를 쓴 수 있습니다 확신 해요,하지만 난 그것을 파이썬에서 꽤 빨리 수행되었다 : 데이터베이스가/큰 복잡 경우

import os, subprocess 
processDir = 'C:\\Database-master\\' 
files = os.listdir(processDir) 
for f in files: 
    db = processDir + f 
    #potentially drop corrupt db and create new ones with f 
    scripts = os.listdir(db) 
    for script in scripts: 
     path = db + '\\' + script 
     proc = subprocess.Popen('sqlcmd -S 127.0.0.1 -i "' + path +'"', shell=True) 
     proc.wait()  
+1

당신이 겪게 될 문제는 그들을 올바른 순서로 얻는 것입니다. – RBarryYoung

+0

웬일인지 그것은 중요하지 않은 것처럼 보였다. Management Studio에서는 존재하지 않는 테이블을 기반으로 함수 나 프로 시저를 만들 수 없다는 것을 알았습니다. 그렇지만 sqlcmd를 사용하여 테이블 앞에서 proc을 만들 수있었습니다. 예 : dbo.SP_update_Claims.storedprocedure.sql은 dbo.update.table.sql에 대한 종속성에도 불구하고 실행되었습니다. 이상한가? –

+1

아닙니다. 저장 프로 시저는 일반적으로 지연된 해결을 지원하므로 문제가되지 않습니다. 뷰는 일반적으로 모든 구성 테이블/뷰가 이미 존재하지 않으면 컴파일/저장 될 수 없기 때문에 문제가됩니다. 일부 그룹은보기의 이름 앞에 문자 "V"가 붙어 있기 때문에 눈에 띄지 않을 수 있습니다.따라서 스크립트가 사전 순으로 실행되면 뷰가 모든 테이블 다음에 실행될 수 있습니다. – RBarryYoung

1

발생할하려고하는 진짜 문제는 배치 실행하지만 아니다 스크립트가 실행되어야하는 순서.

백업 파일이 없으면 여기에서 실제 문제가 될 것입니다.

스크립트가있는 경우 다음과 같이 제안합니다.

  1. 테이블
  2. 전망 다른
  3. 모든 ... 오류를 얻을 때까지

가 그냥 다른 후 하나 개의 쿼리를 실행합니다. 오류가 발생하면 이는 이미 존재하지 않는 객체를 참조하려고하기 때문일 가능성이 큽니다. 나중에 스크립트를 저장하고 스크립트 실행을 계속하십시오. 그런 다음 처음부터 다시 시작하고 오류가 발생한 스크립트를 살펴보십시오. 이제 개체가있을 것입니다. 모든 개체를 만들 때까지 필요한만큼이 작업을 반복하십시오.

+0

나는 타입을 파싱하는 것이 훨씬 더 많은 단계라고 생각하지 않는다. 내 경우에는 그다지 문제가되지 않는다고 생각합니다. 그러나 알고있는 것이 좋다. –

관련 문제