private void HandleOutput(RestoreDatabaseRequest request)
        {
            var waiterConfig = new WaiterConfiguration
            {
                MaxAttempts           = MaxWaitAttempts,
                GetNextDelayInSeconds = (_) => WaitIntervalSeconds
            };

            switch (ParameterSetName)
            {
            case StatusParamSet:
                response = client.Waiters.ForRestoreDatabase(request, waiterConfig, WaitForStatus).Execute();
                break;

            case Default:
                response = client.RestoreDatabase(request).GetAwaiter().GetResult();
                break;
            }
            WriteOutput(response, response.Database);
        }
Esempio n. 2
0
        /// <summary>
        /// Restore a Database based on the request parameters you provide.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public RestoreDatabaseResponse RestoreDatabase(RestoreDatabaseRequest request)
        {
            var uri = new Uri($"{GetEndPoint(DatabaseServices.Databases, this.Region)}/{request.DatabaseId}/actions/resto");

            using (var webResponse = this.RestClient.Post(uri, request.RestoreDatabaseDetails, new HttpRequestHeaderParam()
            {
                IfMatch = request.IfMatch
            }))
                using (var stream = webResponse.GetResponseStream())
                    using (var reader = new StreamReader(stream))
                    {
                        var response = reader.ReadToEnd();

                        return(new RestoreDatabaseResponse()
                        {
                            DatabaseDetails = this.JsonSerializer.Deserialize <DatabaseDetails>(response),
                            OpcRequestId = webResponse.Headers.Get("opc-request-id"),
                            ETag = webResponse.Headers.Get("ETag")
                        });
                    }
        }
Esempio n. 3
0
    public async Task <Database> RestoreDatabaseWithEncryptionAsync(string projectId, string instanceId, string databaseId, string backupId, CryptoKeyName kmsKeyName)
    {
        // Create a DatabaseAdminClient instance.
        DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.Create();

        // Create the RestoreDatabaseRequest with encryption configuration.
        RestoreDatabaseRequest request = new RestoreDatabaseRequest
        {
            ParentAsInstanceName = InstanceName.FromProjectInstance(projectId, instanceId),
            DatabaseId           = databaseId,
            BackupAsBackupName   = BackupName.FromProjectInstanceBackup(projectId, instanceId, backupId),
            EncryptionConfig     = new RestoreDatabaseEncryptionConfig
            {
                EncryptionType            = RestoreDatabaseEncryptionConfig.Types.EncryptionType.CustomerManagedEncryption,
                KmsKeyNameAsCryptoKeyName = kmsKeyName,
            }
        };
        // Execute the RestoreDatabase request.
        var operation = await databaseAdminClient.RestoreDatabaseAsync(request);

        Console.WriteLine("Waiting for the operation to finish.");

        // Poll until the returned long-running operation is complete.
        var completedResponse = await operation.PollUntilCompletedAsync();

        if (completedResponse.IsFaulted)
        {
            Console.WriteLine($"Error while restoring database: {completedResponse.Exception}");
            throw completedResponse.Exception;
        }

        var database    = completedResponse.Result;
        var restoreInfo = database.RestoreInfo;

        Console.WriteLine($"Database {restoreInfo.BackupInfo.SourceDatabase} " +
                          $"restored to {database.Name} " +
                          $"from backup {restoreInfo.BackupInfo.Backup} " +
                          $"using encryption key {database.EncryptionConfig.KmsKeyName}");
        return(database);
    }
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            RestoreDatabaseRequest request;

            try
            {
                request = new RestoreDatabaseRequest
                {
                    DatabaseId             = DatabaseId,
                    RestoreDatabaseDetails = RestoreDatabaseDetails,
                    IfMatch = IfMatch
                };

                HandleOutput(request);
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
Esempio n. 5
0
        public async Task <StorageResponse <bool> > RestoreDatabaseAsync(RestoreDatabaseRequest request)
        {
            await KillDatabaseConncetionsAsync(request.Server);

            try
            {
                var dataFileName = GetDatabaseName(DatabaseFileType.Data, request.Server.DatabaseName);
                var logFileName  = GetDatabaseName(DatabaseFileType.Log, request.Server.DatabaseName);

                var dataFullFileName = request.FilePathData.SetValidDirectoryPathEnd();
                var logFullFileName  = request.FilePathLog.SetValidDirectoryPathEnd();

                dataFullFileName += dataFileName + ConstantsMsSql.FILE_EXTENSION_MDF;
                logFullFileName  += logFileName + ConstantsMsSql.FILE_EXTENSION_LDF;

                var sqlCommand = new StringBuilder();
                sqlCommand.AppendLine($"{ConstantsMsSql.IF} DB_ID('{request.Server.DatabaseName}') {ConstantsMsSql.ISNOTNULL}");
                sqlCommand.AppendLine(ConstantsMsSql.BEGIN);
                sqlCommand.AppendLine($"{ConstantsMsSql.DROP} {ConstantsMsSql.DATABASE} [{request.Server.DatabaseName}]");
                sqlCommand.AppendLine(ConstantsMsSql.END);
                sqlCommand.AppendLine($"{ConstantsMsSql.RESTORE} {ConstantsMsSql.DATABASE} [{request.Server.DatabaseName}]");
                sqlCommand.AppendLine($"{ConstantsMsSql.FROM} {ConstantsMsSql.DISK} = '{request.BackupFullFileName}'");
                sqlCommand.AppendLine($"{ConstantsMsSql.WITH} {ConstantsMsSql.MOVE} '{dataFileName}' {ConstantsMsSql.TO} '{dataFullFileName}',");
                sqlCommand.AppendLine($"{ConstantsMsSql.MOVE} '{logFileName}' {ConstantsMsSql.TO} '{logFullFileName}',");
                sqlCommand.AppendLine($"{ConstantsMsSql.STATS} = 10;");

                await ExecuteNonQueryAsync(request.Server, sqlCommand.ToString(), ConstantsMsSql.MASTER);
            }
            catch (Exception ex)
            {
                return(new StorageResponse <bool> {
                    IsFaulty = true, Exception = ex
                });
            }

            return(new StorageResponse <bool> {
                Data = true
            });
        }
 partial void Modify_RestoreDatabaseRequest(ref RestoreDatabaseRequest request, ref CallSettings settings) =>
 ApplyResourcePrefixHeaderFromInstance(ref settings, request.Parent);
 public Task <InvocationResponse> RestoreDatabaseAsync(string targetModel, RestoreDatabaseRequest request)
 {
     throw new System.NotImplementedException();
 }