2016-08-11 11 views
0

은 내가 데시벨을 삭제하고 내가 필요한 모든 매개 변수를 전달하고 아래 sql.execute()를 실행Groovy 파일에서 mongorestore 명령을 실행할 수 있습니까?

Sql sql = Sql.newInstance(dbSQLUrl, userName, password) 

기존 백업 (SQL)에서 DB를 복원 그루비 스크립트,

sql.execute(
     alter database dbName 
     set offline with rollback immediate 
     drop database dbName 
     ) 


sql.execute(
    RESTORE DATABASE dbName 
    FROM disk = 'C:\Backups' 
    WITH REPLACE 
) 

이 모든 위 코드는 완벽하게 작동합니다. 나는 이것을 MongoDB에 대해서도 구현할 필요가있다. Groovy 파일에서 mongorestore과 같은 Mongo 명령을 실행할 수있는 Mongo에 sql.execute()에 해당하는 것이 있습니까? 몽고에 대한

나는 다음과 같은 코드가 있습니다/mongorestore ~/backups/first_backup/

내가이 달성 할 수있는 방법이 내 그루비 파일 내에서 다음 명령을 이제 실행해야

List credentials = [] 
List servers = [] 

credentials.push(MongoCredential.createCredential(mongoUserName, mongoDBName, mongoPassword as char[])) 
servers.push(new ServerAddress(mongoHost, mongoPort)) 

GMongoClient mongoClient = new GMongoClient(servers,credentials) 
DB mongoDB = mongoClient.getDB(mongoDBName) 
mongoDB.dropDatabase() 

을 거기에 포함?

답변

0

하지 않음이 당신이 필요로 할 수있는 가장 효율적인 방법입니다,하지만 당신은 그 명령을 호출하고 완료 될 때까지 코드에이를 추가하여 기다릴 수 있는지 :

String command = "mongorestore ${System.properties['user.home']}/backups/first_backup" 
Process p = command.execute() 
p.waitFor() 
+0

, 문자열 명령에 준 것과 동일한 = "" "mongorestore의 $의 dbBackUpPath을" ""프로세스 P = command.execute(), basckup db는 생성되지 않지만 mongorestore/home/backups/test 명령 행에서 아래의 코드를 실행하면 잘 동작합니다. 테스트 DB가 복원되는 것을 볼 수 있습니다. – Sharath

+0

'p.waitFor()'를 추가 했습니까? 그 명령이 끝나기를 기다리는 어떤 방법이 필요합니다. 디버깅하려면'p = command.execute()'다음에'println p.in.text + p.err.text'를 추가하고'mongorestore'가 어떤 것을 출력하는지보십시오. –

+1

내 잘못 경로를 잘못 전달하는 대신/home/backups/test 대신 \ home \ backsups \ test. 지금은 잘 작동합니다. – Sharath

0

요약하면 MongoDB 드라이버를 사용하여 구현할 수 없습니다. 이 명령은 명령 행 (예 : MongoDB 쉘)에서만 호출 할 수 있습니다. 날짜를 CSV로 내보내고 프로그래밍 방식으로 데이터를 MongoDB로 가져와야 할 수도 있습니다. 이는 매우 느릴 수 있습니다.

그렇지 않으면 Groovy libs를 사용하여 명령을 실행해야 할 수 있습니다. 아래의 Java 명령과 유사합니다.

Runtime.getRuntime(). exec ("mongoimport -d -h <> ..");

Similar question for Java Driver

+0

I 내 스크립트에서 위의 줄을 실행, 그것은 반면에 내가 명령 줄에서 다음 명령을 실행할 때, "mongorestore/홈/백업/테스트", "프로세스 종료 코드 0으로 완료"하지만 난 개미 데이터베이스를 복원하기 표시되지 않습니다 말한다, DB가 복원되는 걸 봅니다. – Sharath

+0

나는 Runtime.getRuntime()을 썼다. exec ("" "mongorestore $ dbBackUpPath" "") – Sharath

+0

mongorestore의 완전한 절대 경로로 시도해 봤나? – notionquest