List backup operations

List all create backup operations running on the database and list the percentage complete for each operation.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

C++

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  void 
  
 ListBackupOperations 
 ( 
  
 google 
 :: 
 cloud 
 :: 
 spanner_admin 
 :: 
 DatabaseAdminClient 
  
 client 
 , 
  
 std 
 :: 
 string 
  
 const 
&  
 project_id 
 , 
  
 std 
 :: 
 string 
  
 const 
&  
 instance_id 
 , 
  
 std 
 :: 
 string 
  
 const 
&  
 database_id 
 , 
  
 std 
 :: 
 string 
  
 const 
&  
 backup_id 
 ) 
  
 { 
  
 google 
 :: 
 cloud 
 :: 
 spanner 
 :: 
 Instance 
  
 in 
 ( 
 project_id 
 , 
  
 instance_id 
 ); 
  
 google 
 :: 
 cloud 
 :: 
 spanner 
 :: 
 Database 
  
 database 
 ( 
 in 
 , 
  
 database_id 
 ); 
  
 google 
 :: 
 cloud 
 :: 
 spanner 
 :: 
 Backup 
  
 backup 
 ( 
 in 
 , 
  
 backup_id 
 ); 
  
 google 
 :: 
 spanner 
 :: 
 admin 
 :: 
 database 
 :: 
 v1 
 :: 
 ListBackupOperationsRequest 
  
 request 
 ; 
  
 request 
 . 
 set_parent 
 ( 
 in 
 . 
 FullName 
 ()); 
  
 request 
 . 
 set_filter 
 ( 
 std 
 :: 
 string 
 ( 
 "(metadata.@type=type.googleapis.com/" 
 ) 
  
 + 
  
 "google.spanner.admin.database.v1.CreateBackupMetadata)" 
  
 + 
  
 " AND (metadata.database=" 
  
 + 
  
 database 
 . 
 FullName 
 () 
  
 + 
  
 ")" 
 ); 
  
 for 
  
 ( 
 auto 
&  
 operation 
  
 : 
  
 client 
 . 
 ListBackupOperations 
 ( 
 request 
 )) 
  
 { 
  
 if 
  
 ( 
 ! 
 operation 
 ) 
  
 throw 
  
 std 
 :: 
 move 
 ( 
 operation 
 ). 
 status 
 (); 
  
 google 
 :: 
 spanner 
 :: 
 admin 
 :: 
 database 
 :: 
 v1 
 :: 
 CreateBackupMetadata 
  
 metadata 
 ; 
  
 operation 
 - 
> metadata 
 (). 
 UnpackTo 
 ( 
& metadata 
 ); 
  
 std 
 :: 
 cout 
 << 
 "Backup " 
 << 
 metadata 
 . 
 name 
 () 
 << 
 " of database " 
 << 
 metadata 
 . 
 database 
 () 
 << 
 " is " 
 << 
 metadata 
 . 
 progress 
 (). 
 progress_percent 
 () 
 << 
 "% complete. 
 \n 
 " 
 ; 
  
 } 
  
 request 
 . 
 set_filter 
 ( 
 std 
 :: 
 string 
 ( 
 "(metadata.@type:type.googleapis.com/" 
 ) 
  
 + 
  
 "google.spanner.admin.database.v1.CopyBackupMetadata)" 
  
 + 
  
 " AND (metadata.source_backup=" 
  
 + 
  
 backup 
 . 
 FullName 
 () 
  
 + 
  
 ")" 
 ); 
  
 for 
  
 ( 
 auto 
&  
 operation 
  
 : 
  
 client 
 . 
 ListBackupOperations 
 ( 
 request 
 )) 
  
 { 
  
 if 
  
 ( 
 ! 
 operation 
 ) 
  
 throw 
  
 std 
 :: 
 move 
 ( 
 operation 
 ). 
 status 
 (); 
  
 google 
 :: 
 spanner 
 :: 
 admin 
 :: 
 database 
 :: 
 v1 
 :: 
 CopyBackupMetadata 
  
 metadata 
 ; 
  
 operation 
 - 
> metadata 
 (). 
 UnpackTo 
 ( 
& metadata 
 ); 
  
 std 
 :: 
 cout 
 << 
 "Copy " 
 << 
 metadata 
 . 
 name 
 () 
 << 
 " of backup " 
 << 
 metadata 
 . 
 source_backup 
 () 
 << 
 " is " 
 << 
 metadata 
 . 
 progress 
 (). 
 progress_percent 
 () 
 << 
 "% complete. 
 \n 
 " 
 ; 
  
 } 
 } 
 

C#

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  using 
  
  Google.Cloud.Spanner.Admin.Database.V1 
 
 ; 
 using 
  
  Google.Cloud.Spanner.Common.V1 
 
 ; 
 using 
  
  Google.LongRunning 
 
 ; 
 using 
  
 System 
 ; 
 using 
  
 System.Collections.Generic 
 ; 
 public 
  
 class 
  
 ListBackupOperationsSample 
 { 
  
 public 
  
 IEnumerable<Operation> 
  
 ListBackupOperations 
 ( 
 string 
  
 projectId 
 , 
  
 string 
  
 instanceId 
 , 
  
 string 
  
 databaseId 
 ) 
  
 { 
  
 // Create the DatabaseAdminClient instance. 
  
  DatabaseAdminClient 
 
  
 databaseAdminClient 
  
 = 
  
  DatabaseAdminClient 
 
 . 
  Create 
 
 (); 
  
 var 
  
 filter 
  
 = 
  
 $"(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND (metadata.database:{databaseId})" 
 ; 
  
  ListBackupOperationsRequest 
 
  
 request 
  
 = 
  
 new 
  
  ListBackupOperationsRequest 
 
  
 { 
  
 ParentAsInstanceName 
  
 = 
  
  InstanceName 
 
 . 
  FromProjectInstance 
 
 ( 
 projectId 
 , 
  
 instanceId 
 ), 
  
 Filter 
  
 = 
  
 filter 
  
 }; 
  
 // List the create backup operations on the database. 
  
 var 
  
 backupOperations 
  
 = 
  
 databaseAdminClient 
 . 
  ListBackupOperations 
 
 ( 
 request 
 ); 
  
 foreach 
  
 ( 
 var 
  
 operation 
  
 in 
  
 backupOperations 
 ) 
  
 { 
  
  CreateBackupMetadata 
 
  
 metadata 
  
 = 
  
 operation 
 . 
  Metadata 
 
 . 
 Unpack<CreateBackupMetadata> 
 (); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Backup {metadata. Name 
} on " 
  
 + 
  
 $"database {metadata. Database 
} is " 
  
 + 
  
 $"{metadata. Progress 
. ProgressPercent 
}% complete" 
 ); 
  
 } 
  
 return 
  
 backupOperations 
 ; 
  
 } 
 } 
 

Go

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 "regexp" 
  
 database 
  
 "cloud.google.com/go/spanner/admin/database/apiv1" 
  
 adminpb 
  
 "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" 
  
 "github.com/golang/protobuf/ptypes" 
  
 "google.golang.org/api/iterator" 
 ) 
 // listBackupOperations lists the backup operations that are pending or have completed/failed/cancelled within the last 7 days. 
 func 
  
 listBackupOperations 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 db 
  
 string 
 , 
  
 backupId 
  
 string 
 ) 
  
 error 
  
 { 
  
 // db := "projects/my-project/instances/my-instance/databases/my-database" 
  
 // backupID := "my-backup" 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 adminClient 
 , 
  
 err 
  
 := 
  
 database 
 . 
 NewDatabaseAdminClient 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 defer 
  
 adminClient 
 . 
  Close 
 
 () 
  
 matches 
  
 := 
  
 regexp 
 . 
 MustCompile 
 ( 
 "^(.*)/databases/(.*)$" 
 ). 
 FindStringSubmatch 
 ( 
 db 
 ) 
  
 if 
  
 matches 
  
 == 
  
 nil 
  
 || 
  
 len 
 ( 
 matches 
 ) 
  
 != 
  
 3 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Invalid database id %s" 
 , 
  
 db 
 ) 
  
 } 
  
 instanceName 
  
 := 
  
 matches 
 [ 
 1 
 ] 
  
 // List the CreateBackup operations. 
  
 filter 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND (metadata.database:%s)" 
 , 
  
 db 
 ) 
  
 iter 
  
 := 
  
 adminClient 
 . 
 ListBackupOperations 
 ( 
 ctx 
 , 
  
& adminpb 
 . 
 ListBackupOperationsRequest 
 { 
  
 Parent 
 : 
  
 instanceName 
 , 
  
 Filter 
 : 
  
 filter 
 , 
  
 }) 
  
 for 
  
 { 
  
 resp 
 , 
  
 err 
  
 := 
  
 iter 
 . 
 Next 
 () 
  
 if 
  
 err 
  
 == 
  
 iterator 
 . 
 Done 
  
 { 
  
 break 
  
 } 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 metadata 
  
 := 
  
& adminpb 
 . 
 CreateBackupMetadata 
 {} 
  
 if 
  
 err 
  
 := 
  
 ptypes 
 . 
 UnmarshalAny 
 ( 
 resp 
 . 
 Metadata 
 , 
  
 metadata 
 ); 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Backup %s on database %s is %d%% complete.\n" 
 , 
  
 metadata 
 . 
 Name 
 , 
  
 metadata 
 . 
 Database 
 , 
  
 metadata 
 . 
 Progress 
 . 
 ProgressPercent 
 , 
  
 ) 
  
 } 
  
 // List the CopyBackup operations. 
  
 filter 
  
 = 
  
 fmt 
 . 
 Sprintf 
 ( 
 "(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) AND (metadata.source_backup:%s)" 
 , 
  
 backupId 
 ) 
  
 iter 
  
 = 
  
 adminClient 
 . 
 ListBackupOperations 
 ( 
 ctx 
 , 
  
& adminpb 
 . 
 ListBackupOperationsRequest 
 { 
  
 Parent 
 : 
  
 instanceName 
 , 
  
 Filter 
 : 
  
 filter 
 , 
  
 }) 
  
 for 
  
 { 
  
 resp 
 , 
  
 err 
  
 := 
  
 iter 
 . 
 Next 
 () 
  
 if 
  
 err 
  
 == 
  
 iterator 
 . 
 Done 
  
 { 
  
 break 
  
 } 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 metadata 
  
 := 
  
& adminpb 
 . 
 CopyBackupMetadata 
 {} 
  
 if 
  
 err 
  
 := 
  
 ptypes 
 . 
 UnmarshalAny 
 ( 
 resp 
 . 
 Metadata 
 , 
  
 metadata 
 ); 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Backup %s copied from %s is %d%% complete.\n" 
 , 
  
 metadata 
 . 
 Name 
 , 
  
 metadata 
 . 
 SourceBackup 
 , 
  
 metadata 
 . 
 Progress 
 . 
 ProgressPercent 
 , 
  
 ) 
  
 } 
  
 return 
  
 nil 
 } 
 

Java

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  static 
  
 void 
  
 listBackupOperations 
 ( 
  
 DatabaseAdminClient 
  
 databaseAdminClient 
 , 
  
 String 
  
 projectId 
 , 
  
 String 
  
 instanceId 
 , 
  
 String 
  
 databaseId 
 , 
  
 String 
  
 backupId 
 ) 
  
 { 
  
 InstanceName 
  
 instanceName 
  
 = 
  
 InstanceName 
 . 
 of 
 ( 
 projectId 
 , 
  
 instanceId 
 ); 
  
 // Get 'CreateBackup' operations for the sample database. 
  
 String 
  
 filter 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "(metadata.@type:type.googleapis.com/" 
  
 + 
  
 "google.spanner.admin.database.v1.CreateBackupMetadata) " 
  
 + 
  
 "AND (metadata.database:%s)" 
 , 
  
 DatabaseName 
 . 
 of 
 ( 
 projectId 
 , 
  
 instanceId 
 , 
  
 databaseId 
 ). 
 toString 
 ()); 
  
 ListBackupOperationsRequest 
  
 listBackupOperationsRequest 
  
 = 
  
 ListBackupOperationsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 instanceName 
 . 
 toString 
 ()). 
 setFilter 
 ( 
 filter 
 ). 
 build 
 (); 
  
 ListBackupOperationsPagedResponse 
  
 createBackupOperations 
  
 = 
  
 databaseAdminClient 
 . 
 listBackupOperations 
 ( 
 listBackupOperationsRequest 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Create Backup Operations:" 
 ); 
  
 for 
  
 ( 
 Operation 
  
 op 
  
 : 
  
 createBackupOperations 
 . 
 iterateAll 
 ()) 
  
 { 
  
 try 
  
 { 
  
 CreateBackupMetadata 
  
 metadata 
  
 = 
  
 op 
 . 
 getMetadata 
 (). 
 unpack 
 ( 
 CreateBackupMetadata 
 . 
 class 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Backup %s on database %s pending: %d%% complete" 
 , 
  
 metadata 
 . 
 getName 
 (), 
  
 metadata 
 . 
 getDatabase 
 (), 
  
 metadata 
 . 
 getProgress 
 (). 
 getProgressPercent 
 ())); 
  
 } 
  
 catch 
  
 ( 
 InvalidProtocolBufferException 
  
 e 
 ) 
  
 { 
  
 // The returned operation does not contain CreateBackupMetadata. 
  
 System 
 . 
 err 
 . 
 println 
 ( 
 e 
 . 
 getMessage 
 ()); 
  
 } 
  
 } 
  
 // Get copy backup operations for the sample database. 
  
 filter 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "(metadata.@type:type.googleapis.com/" 
  
 + 
  
 "google.spanner.admin.database.v1.CopyBackupMetadata) " 
  
 + 
  
 "AND (metadata.source_backup:%s)" 
 , 
  
 BackupName 
 . 
 of 
 ( 
 projectId 
 , 
  
 instanceId 
 , 
  
 backupId 
 ). 
 toString 
 ()); 
  
 listBackupOperationsRequest 
  
 = 
  
 ListBackupOperationsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 instanceName 
 . 
 toString 
 ()). 
 setFilter 
 ( 
 filter 
 ). 
 build 
 (); 
  
 ListBackupOperationsPagedResponse 
  
 copyBackupOperations 
  
 = 
  
 databaseAdminClient 
 . 
 listBackupOperations 
 ( 
 listBackupOperationsRequest 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Copy Backup Operations:" 
 ); 
  
 for 
  
 ( 
 Operation 
  
 op 
  
 : 
  
 copyBackupOperations 
 . 
 iterateAll 
 ()) 
  
 { 
  
 try 
  
 { 
  
 CopyBackupMetadata 
  
 copyBackupMetadata 
  
 = 
  
 op 
 . 
 getMetadata 
 (). 
 unpack 
 ( 
 CopyBackupMetadata 
 . 
 class 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Copy Backup %s on backup %s pending: %d%% complete" 
 , 
  
 copyBackupMetadata 
 . 
 getName 
 (), 
  
 copyBackupMetadata 
 . 
 getSourceBackup 
 (), 
  
 copyBackupMetadata 
 . 
 getProgress 
 (). 
 getProgressPercent 
 ())); 
  
 } 
  
 catch 
  
 ( 
 InvalidProtocolBufferException 
  
 e 
 ) 
  
 { 
  
 // The returned operation does not contain CopyBackupMetadata. 
  
 System 
 . 
 err 
 . 
 println 
 ( 
 e 
 . 
 getMessage 
 ()); 
  
 } 
  
 } 
 } 
 

Node.js

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  // Imports the Google Cloud client library 
 const 
  
 { 
 Spanner 
 , 
  
 protos 
 } 
  
 = 
  
 require 
 ( 
 ' @google-cloud/spanner 
' 
 ); 
 /** 
 * TODO(developer): Uncomment the following lines before running the sample. 
 */ 
 // const projectId = 'my-project-id'; 
 // const databaseId = 'my-database'; 
 // const backupId = 'my-backup'; 
 // const instanceId = 'my-instance'; 
 // Creates a client 
 const 
  
 spanner 
  
 = 
  
 new 
  
  Spanner 
 
 ({ 
  
 projectId 
 : 
  
 projectId 
 , 
 }); 
 // Gets a reference to a Cloud Spanner Database Admin Client object 
 const 
  
 databaseAdminClient 
  
 = 
  
 spanner 
 . 
  getDatabaseAdminClient 
 
 (); 
 // List create backup operations 
 try 
  
 { 
  
 const 
  
 [ 
 backupOperations 
 ] 
  
 = 
  
 await 
  
 databaseAdminClient 
 . 
 listBackupOperations 
 ({ 
  
 parent 
 : 
  
 databaseAdminClient 
 . 
 instancePath 
 ( 
 projectId 
 , 
  
 instanceId 
 ), 
  
 filter 
 : 
  
 '(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) ' 
  
 + 
  
 `AND (metadata.database: 
 ${ 
 databaseId 
 } 
 )` 
 , 
  
 }); 
  
 console 
 . 
 log 
 ( 
 'Create Backup Operations:' 
 ); 
  
 backupOperations 
 . 
 forEach 
 ( 
 backupOperation 
  
 = 
>  
 { 
  
 const 
  
 metadata 
  
 = 
  
 protos 
 . 
 google 
 . 
 spanner 
 . 
 admin 
 . 
 database 
 . 
 v1 
 . 
 CreateBackupMetadata 
 . 
 decode 
 ( 
  
 backupOperation 
 . 
 metadata 
 . 
 value 
 , 
  
 ); 
  
 console 
 . 
 log 
 ( 
  
 `Backup 
 ${ 
 metadata 
 . 
 name 
 } 
 on database 
 ${ 
 metadata 
 . 
 database 
 } 
 is ` 
  
 + 
  
 ` 
 ${ 
 metadata 
 . 
 progress 
 . 
 progressPercent 
 } 
 % complete.` 
 , 
  
 ); 
  
 }); 
 } 
  
 catch 
  
 ( 
 err 
 ) 
  
 { 
  
 console 
 . 
 error 
 ( 
 'ERROR:' 
 , 
  
 err 
 ); 
 } 
 // List copy backup operations 
 try 
  
 { 
  
 console 
 . 
 log 
 ( 
  
 '(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) ' 
  
 + 
  
 `AND (metadata.source_backup: 
 ${ 
 backupId 
 } 
 )` 
 , 
  
 ); 
  
 const 
  
 [ 
 backupOperations 
 ] 
  
 = 
  
 await 
  
 databaseAdminClient 
 . 
 listBackupOperations 
 ({ 
  
 parent 
 : 
  
 databaseAdminClient 
 . 
 instancePath 
 ( 
 projectId 
 , 
  
 instanceId 
 ), 
  
 filter 
 : 
  
 '(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) ' 
  
 + 
  
 `AND (metadata.source_backup: 
 ${ 
 backupId 
 } 
 )` 
 , 
  
 }); 
  
 console 
 . 
 log 
 ( 
 'Copy Backup Operations:' 
 ); 
  
 backupOperations 
 . 
 forEach 
 ( 
 backupOperation 
  
 = 
>  
 { 
  
 const 
  
 metadata 
  
 = 
  
 protos 
 . 
 google 
 . 
 spanner 
 . 
 admin 
 . 
 database 
 . 
 v1 
 . 
 CopyBackupMetadata 
 . 
 decode 
 ( 
  
 backupOperation 
 . 
 metadata 
 . 
 value 
 , 
  
 ); 
  
 console 
 . 
 log 
 ( 
  
 `Backup 
 ${ 
 metadata 
 . 
 name 
 } 
 copied from source backup 
 ${ 
 metadata 
 . 
 sourceBackup 
 } 
 is ` 
  
 + 
  
 ` 
 ${ 
 metadata 
 . 
 progress 
 . 
 progressPercent 
 } 
 % complete.` 
 , 
  
 ); 
  
 }); 
 } 
  
 catch 
  
 ( 
 err 
 ) 
  
 { 
  
 console 
 . 
 error 
 ( 
 'ERROR:' 
 , 
  
 err 
 ); 
 } 
 

PHP

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  use Google\Cloud\Spanner\Admin\Database\V1\Client\DatabaseAdminClient; 
 use Google\Cloud\Spanner\Admin\Database\V1\CreateBackupMetadata; 
 use Google\Cloud\Spanner\Admin\Database\V1\CopyBackupMetadata; 
 use Google\Cloud\Spanner\Admin\Database\V1\ListBackupOperationsRequest; 
 /** 
 * List all create backup operations in an instance. 
 * Optionally passing the backupId will also list the 
 * copy backup operations on the backup. 
 * 
 * @param string $projectId The Google Cloud project ID. 
 * @param string $instanceId The Spanner instance ID. 
 * @param string $databaseId The Spanner database ID. 
 * @param string $backupId The Spanner backup ID whose copy operations need to be listed. 
 */ 
 function list_backup_operations( 
 string $projectId, 
 string $instanceId, 
 string $databaseId, 
 string $backupId 
 ): void { 
 $databaseAdminClient = new DatabaseAdminClient(); 
 $parent = DatabaseAdminClient::instanceName($projectId, $instanceId); 
 // List the CreateBackup operations. 
 $filterCreateBackup = '(metadata.@type:type.googleapis.com/' . 
 'google.spanner.admin.database.v1.CreateBackupMetadata) AND ' . "(metadata.database:$databaseId)"; 
 // See https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#listbackupoperationsrequest 
 // for the possible filter values 
 $filterCopyBackup = sprintf('(metadata.@type:type.googleapis.com/' . 
 'google.spanner.admin.database.v1.CopyBackupMetadata) AND ' . "(metadata.source_backup:$backupId)"); 
 $operations = $databaseAdminClient->listBackupOperations( 
 new ListBackupOperationsRequest([ 
 'parent' => $parent, 
 'filter' => $filterCreateBackup 
 ]) 
 ); 
 foreach ($operations->iterateAllElements() as $operation) { 
 $obj = new CreateBackupMetadata(); 
 $meta = $operation->getMetadata()->unpack($obj); 
 $backupName = basename($meta->getName()); 
 $dbName = basename($meta->getDatabase()); 
 $progress = $meta->getProgress()->getProgressPercent(); 
 printf('Backup %s on database %s is %d%% complete.' . PHP_EOL, $backupName, $dbName, $progress); 
 } 
 $operations = $databaseAdminClient->listBackupOperations( 
 new ListBackupOperationsRequest([ 
 'parent' => $parent, 
 'filter' => $filterCopyBackup 
 ]) 
 ); 
 foreach ($operations->iterateAllElements() as $operation) { 
 $obj = new CopyBackupMetadata(); 
 $meta = $operation->getMetadata()->unpack($obj); 
 $backupName = basename($meta->getName()); 
 $progress = $meta->getProgress()->getProgressPercent(); 
 printf('Copy Backup %s on source backup %s is %d%% complete.' . PHP_EOL, $backupName, $backupId, $progress); 
 } 
 } 
 

Python

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  def 
  
 list_backup_operations 
 ( 
 instance_id 
 , 
 database_id 
 , 
 backup_id 
 ): 
 from 
  
 google.cloud.spanner_admin_database_v1.types 
  
 import 
 backup 
 as 
 backup_pb 
 spanner_client 
 = 
 spanner 
 . 
 Client 
 () 
 database_admin_api 
 = 
 spanner_client 
 . 
 database_admin_api 
 # List the CreateBackup operations. 
 filter_ 
 = 
 ( 
 "(metadata.@type:type.googleapis.com/" 
 "google.spanner.admin.database.v1.CreateBackupMetadata) " 
 "AND (metadata.database: 
 {} 
 )" 
 ) 
 . 
 format 
 ( 
 database_id 
 ) 
 request 
 = 
 backup_pb 
 . 
 ListBackupOperationsRequest 
 ( 
 parent 
 = 
 database_admin_api 
 . 
 instance_path 
 ( 
 spanner_client 
 . 
 project 
 , 
 instance_id 
 ), 
 filter 
 = 
 filter_ 
 , 
 ) 
 operations 
 = 
 database_admin_api 
 . 
 list_backup_operations 
 ( 
 request 
 ) 
 for 
 op 
 in 
 operations 
 : 
 metadata 
 = 
 protobuf_helpers 
 . 
 from_any_pb 
 ( 
 backup_pb 
 . 
 CreateBackupMetadata 
 , 
 op 
 . 
 metadata 
 ) 
 print 
 ( 
 "Backup 
 {} 
 on database 
 {} 
 : 
 {}% c 
 omplete." 
 . 
 format 
 ( 
 metadata 
 . 
 name 
 , 
 metadata 
 . 
 database 
 , 
 metadata 
 . 
 progress 
 . 
 progress_percent 
 ) 
 ) 
 # List the CopyBackup operations. 
 filter_ 
 = 
 ( 
 "(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CopyBackupMetadata) " 
 "AND (metadata.source_backup: 
 {} 
 )" 
 ) 
 . 
 format 
 ( 
 backup_id 
 ) 
 request 
 = 
 backup_pb 
 . 
 ListBackupOperationsRequest 
 ( 
 parent 
 = 
 database_admin_api 
 . 
 instance_path 
 ( 
 spanner_client 
 . 
 project 
 , 
 instance_id 
 ), 
 filter 
 = 
 filter_ 
 , 
 ) 
 operations 
 = 
 database_admin_api 
 . 
 list_backup_operations 
 ( 
 request 
 ) 
 for 
 op 
 in 
 operations 
 : 
 metadata 
 = 
 protobuf_helpers 
 . 
 from_any_pb 
 ( 
 backup_pb 
 . 
 CopyBackupMetadata 
 , 
 op 
 . 
 metadata 
 ) 
 print 
 ( 
 "Backup 
 {} 
 on source backup 
 {} 
 : 
 {}% c 
 omplete." 
 . 
 format 
 ( 
 metadata 
 . 
 name 
 , 
 metadata 
 . 
 source_backup 
 , 
 metadata 
 . 
 progress 
 . 
 progress_percent 
 , 
 ) 
 ) 
 

Ruby

To learn how to install and use the client library for Spanner, see Spanner client libraries .

To authenticate to Spanner, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  # project_id  = "Your Google Cloud project ID" 
 # instance_id = "Your Spanner instance ID" 
 # database_id = "Your Spanner database ID" 
 require 
  
 "google/cloud/spanner" 
 require 
  
 "google/cloud/spanner/admin/database" 
 database_admin_client 
  
 = 
  
 Google 
 :: 
 Cloud 
 :: 
 Spanner 
 :: 
 Admin 
 :: 
 Database 
 . 
 database_admin 
 instance_path 
  
 = 
  
 database_admin_client 
 . 
 instance_path 
  
 project 
 : 
  
 project_id 
 , 
  
 instance 
 : 
  
 instance_id 
 jobs 
  
 = 
  
 database_admin_client 
 . 
 list_backup_operations 
  
 parent 
 : 
  
 instance_path 
 , 
  
 filter 
 : 
  
 "metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata" 
 jobs 
 . 
 each 
  
 do 
  
 | 
 job 
 | 
  
 if 
  
 job 
 . 
 error? 
  
 puts 
  
 job 
 . 
 error 
  
 else 
  
 puts 
  
 "Backup 
 #{ 
 job 
 . 
 results 
 . 
 name 
 } 
 on database 
 #{ 
 database_id 
 } 
 is 
 #{ 
 job 
 . 
 metadata 
 . 
 progress 
 . 
 progress_percent 
 } 
 % complete" 
  
 end 
 end 
 

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .

Create a Mobile Website
View Site in Mobile | Classic
Share by: