// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.oracledatabase.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/field_info.proto";
import "google/api/resource.proto";
import "google/cloud/oracledatabase/v1/autonomous_database.proto";
import "google/cloud/oracledatabase/v1/autonomous_database_character_set.proto";
import "google/cloud/oracledatabase/v1/autonomous_db_backup.proto";
import "google/cloud/oracledatabase/v1/autonomous_db_version.proto";
import "google/cloud/oracledatabase/v1/database.proto";
import "google/cloud/oracledatabase/v1/database_character_set.proto";
import "google/cloud/oracledatabase/v1/db_node.proto";
import "google/cloud/oracledatabase/v1/db_server.proto";
import "google/cloud/oracledatabase/v1/db_system.proto";
import "google/cloud/oracledatabase/v1/db_system_initial_storage_size.proto";
import "google/cloud/oracledatabase/v1/db_system_shape.proto";
import "google/cloud/oracledatabase/v1/db_version.proto";
import "google/cloud/oracledatabase/v1/entitlement.proto";
import "google/cloud/oracledatabase/v1/exadata_infra.proto";
import "google/cloud/oracledatabase/v1/exadb_vm_cluster.proto";
import "google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto";
import "google/cloud/oracledatabase/v1/gi_version.proto";
import "google/cloud/oracledatabase/v1/minor_version.proto";
import "google/cloud/oracledatabase/v1/odb_network.proto";
import "google/cloud/oracledatabase/v1/odb_subnet.proto";
import "google/cloud/oracledatabase/v1/pluggable_database.proto";
import "google/cloud/oracledatabase/v1/vm_cluster.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.OracleDatabase.V1";
option go_package = "cloud.google.com/go/oracledatabase/apiv1/oracledatabasepb;oracledatabasepb";
option java_multiple_files = true;
option java_outer_classname = "V1mainProto";
option java_package = "com.google.cloud.oracledatabase.v1";
option php_namespace = "Google\\Cloud\\OracleDatabase\\V1";
option ruby_package = "Google::Cloud::OracleDatabase::V1";
option (google.api.resource_definition) = {
  type: "compute.googleapis.com/Network"
  pattern: "projects/{project}/global/networks/{network}"
};
option (google.api.resource_definition) = {
  type: "cloudkms.googleapis.com/CryptoKey"
  pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"
};

// Service describing handlers for resources
service OracleDatabase {
  option (google.api.default_host) = "oracledatabase.googleapis.com";
  option (google.api.oauth_scopes) =
      "https://www.googleapis.com/auth/cloud-platform";

  // Lists Exadata Infrastructures in a given project and location.
  rpc ListCloudExadataInfrastructures(ListCloudExadataInfrastructuresRequest)
      returns (ListCloudExadataInfrastructuresResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/cloudExadataInfrastructures"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single Exadata Infrastructure.
  rpc GetCloudExadataInfrastructure(GetCloudExadataInfrastructureRequest)
      returns (CloudExadataInfrastructure) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/cloudExadataInfrastructures/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new Exadata Infrastructure in a given project and location.
  rpc CreateCloudExadataInfrastructure(CreateCloudExadataInfrastructureRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/cloudExadataInfrastructures"
      body: "cloud_exadata_infrastructure"
    };
    option (google.api.method_signature) =
        "parent,cloud_exadata_infrastructure,cloud_exadata_infrastructure_id";
    option (google.longrunning.operation_info) = {
      response_type: "CloudExadataInfrastructure"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single Exadata Infrastructure.
  rpc DeleteCloudExadataInfrastructure(DeleteCloudExadataInfrastructureRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/cloudExadataInfrastructures/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists the VM Clusters in a given project and location.
  rpc ListCloudVmClusters(ListCloudVmClustersRequest)
      returns (ListCloudVmClustersResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/cloudVmClusters"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single VM Cluster.
  rpc GetCloudVmCluster(GetCloudVmClusterRequest) returns (CloudVmCluster) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/cloudVmClusters/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new VM Cluster in a given project and location.
  rpc CreateCloudVmCluster(CreateCloudVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/cloudVmClusters"
      body: "cloud_vm_cluster"
    };
    option (google.api.method_signature) =
        "parent,cloud_vm_cluster,cloud_vm_cluster_id";
    option (google.longrunning.operation_info) = {
      response_type: "CloudVmCluster"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single VM Cluster.
  rpc DeleteCloudVmCluster(DeleteCloudVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/cloudVmClusters/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists the entitlements in a given project.
  rpc ListEntitlements(ListEntitlementsRequest)
      returns (ListEntitlementsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/entitlements"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists the database servers of an Exadata Infrastructure instance.
  rpc ListDbServers(ListDbServersRequest) returns (ListDbServersResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*/cloudExadataInfrastructures/*}/dbServers"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists the database nodes of a VM Cluster.
  rpc ListDbNodes(ListDbNodesRequest) returns (ListDbNodesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*/cloudVmClusters/*}/dbNodes"
      additional_bindings {
        get: "/v1/{parent=projects/*/locations/*/exadbVmClusters/*}/dbNodes"
      }
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists all the valid Oracle Grid Infrastructure (GI) versions for the given
  // project and location.
  rpc ListGiVersions(ListGiVersionsRequest) returns (ListGiVersionsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/giVersions"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists all the valid minor versions for the given
  // project, location, gi version and shape family.
  rpc ListMinorVersions(ListMinorVersionsRequest)
      returns (ListMinorVersionsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*/giVersions/*}/minorVersions"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists the database system shapes available for the project and location.
  rpc ListDbSystemShapes(ListDbSystemShapesRequest)
      returns (ListDbSystemShapesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/dbSystemShapes"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists the Autonomous Databases in a given project and location.
  rpc ListAutonomousDatabases(ListAutonomousDatabasesRequest)
      returns (ListAutonomousDatabasesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/autonomousDatabases"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets the details of a single Autonomous Database.
  rpc GetAutonomousDatabase(GetAutonomousDatabaseRequest)
      returns (AutonomousDatabase) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new Autonomous Database in a given project and location.
  rpc CreateAutonomousDatabase(CreateAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/autonomousDatabases"
      body: "autonomous_database"
    };
    option (google.api.method_signature) =
        "parent,autonomous_database,autonomous_database_id";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Updates the parameters of a single Autonomous Database.
  rpc UpdateAutonomousDatabase(UpdateAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      patch: "/v1/{autonomous_database.name=projects/*/locations/*/autonomousDatabases/*}"
      body: "autonomous_database"
    };
    option (google.api.method_signature) = "autonomous_database,update_mask";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single Autonomous Database.
  rpc DeleteAutonomousDatabase(DeleteAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Restores a single Autonomous Database.
  rpc RestoreAutonomousDatabase(RestoreAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:restore"
      body: "*"
    };
    option (google.api.method_signature) = "name,restore_time";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Generates a wallet for an Autonomous Database.
  rpc GenerateAutonomousDatabaseWallet(GenerateAutonomousDatabaseWalletRequest)
      returns (GenerateAutonomousDatabaseWalletResponse) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:generateWallet"
      body: "*"
    };
    option (google.api.method_signature) = "name,type,is_regional,password";
  }

  // Lists all the available Autonomous Database versions for a project and
  // location.
  rpc ListAutonomousDbVersions(ListAutonomousDbVersionsRequest)
      returns (ListAutonomousDbVersionsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/autonomousDbVersions"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists Autonomous Database Character Sets in a given project and location.
  rpc ListAutonomousDatabaseCharacterSets(
      ListAutonomousDatabaseCharacterSetsRequest)
      returns (ListAutonomousDatabaseCharacterSetsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/autonomousDatabaseCharacterSets"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists the long-term and automatic backups of an Autonomous Database.
  rpc ListAutonomousDatabaseBackups(ListAutonomousDatabaseBackupsRequest)
      returns (ListAutonomousDatabaseBackupsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/autonomousDatabaseBackups"
    };
    option (google.api.method_signature) = "parent";
  }

  // Stops an Autonomous Database.
  rpc StopAutonomousDatabase(StopAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:stop"
      body: "*"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Starts an Autonomous Database.
  rpc StartAutonomousDatabase(StartAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:start"
      body: "*"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Restarts an Autonomous Database.
  rpc RestartAutonomousDatabase(RestartAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:restart"
      body: "*"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Initiates a switchover of specified autonomous database to the associated
  // peer database.
  rpc SwitchoverAutonomousDatabase(SwitchoverAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:switchover"
      body: "*"
    };
    option (google.api.method_signature) = "name,peer_autonomous_database";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Initiates a failover to target autonomous database from the associated
  // primary database.
  rpc FailoverAutonomousDatabase(FailoverAutonomousDatabaseRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/autonomousDatabases/*}:failover"
      body: "*"
    };
    option (google.api.method_signature) = "name,peer_autonomous_database";
    option (google.longrunning.operation_info) = {
      response_type: "AutonomousDatabase"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists the ODB Networks in a given project and location.
  rpc ListOdbNetworks(ListOdbNetworksRequest)
      returns (ListOdbNetworksResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/odbNetworks"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single ODB Network.
  rpc GetOdbNetwork(GetOdbNetworkRequest) returns (OdbNetwork) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/odbNetworks/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new ODB Network in a given project and location.
  rpc CreateOdbNetwork(CreateOdbNetworkRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/odbNetworks"
      body: "odb_network"
    };
    option (google.api.method_signature) = "parent,odb_network,odb_network_id";
    option (google.longrunning.operation_info) = {
      response_type: "OdbNetwork"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single ODB Network.
  rpc DeleteOdbNetwork(DeleteOdbNetworkRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/odbNetworks/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists all the ODB Subnets in a given ODB Network.
  rpc ListOdbSubnets(ListOdbSubnetsRequest) returns (ListOdbSubnetsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*/odbNetworks/*}/odbSubnets"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single ODB Subnet.
  rpc GetOdbSubnet(GetOdbSubnetRequest) returns (OdbSubnet) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/odbNetworks/*/odbSubnets/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new ODB Subnet in a given ODB Network.
  rpc CreateOdbSubnet(CreateOdbSubnetRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*/odbNetworks/*}/odbSubnets"
      body: "odb_subnet"
    };
    option (google.api.method_signature) = "parent,odb_subnet,odb_subnet_id";
    option (google.longrunning.operation_info) = {
      response_type: "OdbSubnet"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single ODB Subnet.
  rpc DeleteOdbSubnet(DeleteOdbSubnetRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/odbNetworks/*/odbSubnets/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists all the Exadb (Exascale) VM Clusters for the given project and
  // location.
  rpc ListExadbVmClusters(ListExadbVmClustersRequest)
      returns (ListExadbVmClustersResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/exadbVmClusters"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single Exadb (Exascale) VM Cluster.
  rpc GetExadbVmCluster(GetExadbVmClusterRequest) returns (ExadbVmCluster) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/exadbVmClusters/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new Exadb (Exascale) VM Cluster resource.
  rpc CreateExadbVmCluster(CreateExadbVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/exadbVmClusters"
      body: "exadb_vm_cluster"
    };
    option (google.api.method_signature) =
        "parent,exadb_vm_cluster,exadb_vm_cluster_id";
    option (google.longrunning.operation_info) = {
      response_type: "ExadbVmCluster"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single Exadb (Exascale) VM Cluster.
  rpc DeleteExadbVmCluster(DeleteExadbVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/exadbVmClusters/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Updates a single Exadb (Exascale) VM Cluster. To add virtual machines to
  // existing exadb vm cluster, only pass the node count.
  rpc UpdateExadbVmCluster(UpdateExadbVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      patch: "/v1/{exadb_vm_cluster.name=projects/*/locations/*/exadbVmClusters/*}"
      body: "exadb_vm_cluster"
    };
    option (google.api.method_signature) = "exadb_vm_cluster,update_mask";
    option (google.longrunning.operation_info) = {
      response_type: "ExadbVmCluster"
      metadata_type: "OperationMetadata"
    };
  }

  // Removes virtual machines from an existing exadb vm cluster.
  rpc RemoveVirtualMachineExadbVmCluster(
      RemoveVirtualMachineExadbVmClusterRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/exadbVmClusters/*}:removeVirtualMachine"
      body: "*"
    };
    option (google.api.method_signature) = "name,hostnames";
    option (google.longrunning.operation_info) = {
      response_type: "ExadbVmCluster"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists all the ExascaleDB Storage Vaults for the given project and
  // location.
  rpc ListExascaleDbStorageVaults(ListExascaleDbStorageVaultsRequest)
      returns (ListExascaleDbStorageVaultsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/exascaleDbStorageVaults"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single ExascaleDB Storage Vault.
  rpc GetExascaleDbStorageVault(GetExascaleDbStorageVaultRequest)
      returns (ExascaleDbStorageVault) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/exascaleDbStorageVaults/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new ExascaleDB Storage Vault resource.
  rpc CreateExascaleDbStorageVault(CreateExascaleDbStorageVaultRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/exascaleDbStorageVaults"
      body: "exascale_db_storage_vault"
    };
    option (google.api.method_signature) =
        "parent,exascale_db_storage_vault,exascale_db_storage_vault_id";
    option (google.longrunning.operation_info) = {
      response_type: "ExascaleDbStorageVault"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single ExascaleDB Storage Vault.
  rpc DeleteExascaleDbStorageVault(DeleteExascaleDbStorageVaultRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/exascaleDbStorageVaults/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Lists all the DbSystemInitialStorageSizes for the given project and
  // location.
  rpc ListDbSystemInitialStorageSizes(ListDbSystemInitialStorageSizesRequest)
      returns (ListDbSystemInitialStorageSizesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/dbSystemInitialStorageSizes"
    };
    option (google.api.method_signature) = "parent";
  }

  // Lists all the Databases for the given project, location and DbSystem.
  rpc ListDatabases(ListDatabasesRequest) returns (ListDatabasesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/databases"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single Database.
  rpc GetDatabase(GetDatabaseRequest) returns (Database) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/databases/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists all the PluggableDatabases for the given project, location and
  // Container Database.
  rpc ListPluggableDatabases(ListPluggableDatabasesRequest)
      returns (ListPluggableDatabasesResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/pluggableDatabases"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single PluggableDatabase.
  rpc GetPluggableDatabase(GetPluggableDatabaseRequest)
      returns (PluggableDatabase) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/pluggableDatabases/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists all the DbSystems for the given project and location.
  rpc ListDbSystems(ListDbSystemsRequest) returns (ListDbSystemsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/dbSystems"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single DbSystem.
  rpc GetDbSystem(GetDbSystemRequest) returns (DbSystem) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/dbSystems/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new DbSystem in a given project and location.
  rpc CreateDbSystem(CreateDbSystemRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/dbSystems"
      body: "db_system"
    };
    option (google.api.method_signature) = "parent,db_system,db_system_id";
    option (google.longrunning.operation_info) = {
      response_type: "DbSystem"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single DbSystem.
  rpc DeleteDbSystem(DeleteDbSystemRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/dbSystems/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // List DbVersions for the given project and location.
  rpc ListDbVersions(ListDbVersionsRequest) returns (ListDbVersionsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/dbVersions"
    };
    option (google.api.method_signature) = "parent";
  }

  // List DatabaseCharacterSets for the given project and location.
  rpc ListDatabaseCharacterSets(ListDatabaseCharacterSetsRequest)
      returns (ListDatabaseCharacterSetsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/databaseCharacterSets"
    };
    option (google.api.method_signature) = "parent";
  }
}

// The request for `CloudExadataInfrastructures.List`.
message ListCloudExadataInfrastructuresRequest {
  // Required. The parent value for CloudExadataInfrastructure in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/CloudExadataInfrastructure"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 Exadata infrastructures will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for ordering the results of the request.
  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `CloudExadataInfrastructures.list`.
message ListCloudExadataInfrastructuresResponse {
  // The list of Exadata Infrastructures.
  repeated CloudExadataInfrastructure cloud_exadata_infrastructures = 1;

  // A token for fetching next page of response.
  string next_page_token = 2;
}

// The request for `CloudExadataInfrastructure.Get`.
message GetCloudExadataInfrastructureRequest {
  // Required. The name of the Cloud Exadata Infrastructure in the following
  // format:
  // projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloud_exadata_infrastructure}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/CloudExadataInfrastructure"
    }
  ];
}

// The request for `CloudExadataInfrastructure.Create`.
message CreateCloudExadataInfrastructureRequest {
  // Required. The parent value for CloudExadataInfrastructure in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/CloudExadataInfrastructure"
    }
  ];

  // Required. The ID of the Exadata Infrastructure to create. This value is
  // restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  // 63 characters in length. The value must start with a letter and end with a
  // letter or a number.
  string cloud_exadata_infrastructure_id = 2
      [(google.api.field_behavior) = REQUIRED];

  // Required. Details of the Exadata Infrastructure instance to create.
  CloudExadataInfrastructure cloud_exadata_infrastructure = 3
      [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 4 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `CloudExadataInfrastructure.Delete`.
message DeleteCloudExadataInfrastructureRequest {
  // Required. The name of the Cloud Exadata Infrastructure in the following
  // format:
  // projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloud_exadata_infrastructure}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/CloudExadataInfrastructure"
    }
  ];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 2 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];

  // Optional. If set to true, all VM clusters for this Exadata Infrastructure
  // will be deleted. An Exadata Infrastructure can only be deleted once all its
  // VM clusters have been deleted.
  bool force = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The request for `CloudVmCluster.List`.
message ListCloudVmClustersRequest {
  // Required. The name of the parent in the following format:
  // projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/CloudVmCluster"
    }
  ];

  // Optional. The number of VM clusters to return.
  // If unspecified, at most 50 VM clusters will be returned.
  // The maximum value is 1,000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying the page of results the server returns.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `CloudVmCluster.List`.
message ListCloudVmClustersResponse {
  // The list of VM Clusters.
  repeated CloudVmCluster cloud_vm_clusters = 1;

  // A token to fetch the next page of results.
  string next_page_token = 2;
}

// The request for `CloudVmCluster.Get`.
message GetCloudVmClusterRequest {
  // Required. The name of the Cloud VM Cluster in the following format:
  // projects/{project}/locations/{location}/cloudVmClusters/{cloud_vm_cluster}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/CloudVmCluster"
    }
  ];
}

// The request for `CloudVmCluster.Create`.
message CreateCloudVmClusterRequest {
  // Required. The name of the parent in the following format:
  // projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/CloudVmCluster"
    }
  ];

  // Required. The ID of the VM Cluster to create. This value is restricted
  // to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of 63
  // characters in length. The value must start with a letter and end with
  // a letter or a number.
  string cloud_vm_cluster_id = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The resource being created
  CloudVmCluster cloud_vm_cluster = 3 [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 4 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `CloudVmCluster.Delete`.
message DeleteCloudVmClusterRequest {
  // Required. The name of the Cloud VM Cluster in the following format:
  // projects/{project}/locations/{location}/cloudVmClusters/{cloud_vm_cluster}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/CloudVmCluster"
    }
  ];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 2 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];

  // Optional. If set to true, all child resources for the VM Cluster will be
  // deleted. A VM Cluster can only be deleted once all its child resources have
  // been deleted.
  bool force = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The request for `Entitlement.List`.
message ListEntitlementsRequest {
  // Required. The parent value for the entitlement in the following format:
  // projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/Entitlement"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, a maximum of 50 entitlements will be returned.
  // The maximum value is 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `Entitlement.List`.
message ListEntitlementsResponse {
  // The list of Entitlements
  repeated Entitlement entitlements = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `DbServer.List`.
message ListDbServersRequest {
  // Required. The parent value for database server in the following format:
  // projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloudExadataInfrastructure}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/DbServer"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, a maximum of 50 db servers will be returned.
  // The maximum value is 1000; values above 1000 will be reset to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `DbServer.List`.
message ListDbServersResponse {
  // The list of database servers.
  repeated DbServer db_servers = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `DbNode.List`.
message ListDbNodesRequest {
  // Required. The parent value for database node in the following format:
  // projects/{project}/locations/{location}/cloudVmClusters/{cloudVmCluster}.
  // .
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/DbNode"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 db nodes will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the node should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `DbNode.List`.
message ListDbNodesResponse {
  // The list of DB Nodes
  repeated DbNode db_nodes = 1;

  // A token identifying a page of results the node should return.
  string next_page_token = 2;
}

// The request for `GiVersion.List`.
message ListGiVersionsRequest {
  // Required. The parent value for Grid Infrastructure Version in the following
  // format: Format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/GiVersion"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, a maximum of 50 Oracle Grid Infrastructure (GI) versions
  // will be returned. The maximum value is 1000; values above 1000 will be
  // reset to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request. Only the
  // shape, gcp_oracle_zone and gi_version fields are supported in this format:
  // `shape="{shape}"`.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `GiVersion.List`.
message ListGiVersionsResponse {
  // The list of Oracle Grid Infrastructure (GI) versions.
  repeated GiVersion gi_versions = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `DbSystemShape.List`.
message ListDbSystemShapesRequest {
  // Required. The parent value for Database System Shapes in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/DbSystemShape"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 database system shapes will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request. Only the
  // gcp_oracle_zone_id field is supported in this format:
  // `gcp_oracle_zone_id="{gcp_oracle_zone_id}"`.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `DbSystemShape.List`.
message ListDbSystemShapesResponse {
  // The list of Database System shapes.
  repeated DbSystemShape db_system_shapes = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// Represents the metadata of the long-running operation.
message OperationMetadata {
  // Output only. The time the operation was created.
  google.protobuf.Timestamp create_time = 1
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The time the operation finished running.
  google.protobuf.Timestamp end_time = 2
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Server-defined resource path for the target of the operation.
  string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Name of the verb executed by the operation.
  string verb = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The status of the operation.
  string status_message = 5 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Identifies whether the user has requested cancellation
  // of the operation. Operations that have been cancelled successfully
  // have [Operation.error][] value with a
  // [google.rpc.Status.code][google.rpc.Status.code] of 1, corresponding to
  // `Code.CANCELLED`.
  bool requested_cancellation = 6 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. API version used to start the operation.
  string api_version = 7 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. An estimated percentage of the operation that has been
  // completed at a given moment of time, between 0 and 100.
  double percent_complete = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// The request for `AutonomousDatabase.List`.
message ListAutonomousDatabasesRequest {
  // Required. The parent value for the Autonomous Database in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 Autonomous Database will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for ordering the results of the request.
  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `AutonomousDatabase.List`.
message ListAutonomousDatabasesResponse {
  // The list of Autonomous Databases.
  repeated AutonomousDatabase autonomous_databases = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `AutonomousDatabase.Get`.
message GetAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `AutonomousDatabase.Create`.
message CreateAutonomousDatabaseRequest {
  // Required. The name of the parent in the following format:
  // projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Required. The ID of the Autonomous Database to create. This value is
  // restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  // 63 characters in length. The value must start with a letter and end with a
  // letter or a number.
  string autonomous_database_id = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The Autonomous Database being created.
  AutonomousDatabase autonomous_database = 3
      [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 4 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `AutonomousDatabase.Update`.
message UpdateAutonomousDatabaseRequest {
  // Optional. Field mask is used to specify the fields to be overwritten in the
  // Exadata resource by the update. The fields specified in the update_mask are
  // relative to the resource, not the full request. A field will be overwritten
  // if it is in the mask. If the user does not provide a mask then all fields
  // will be overwritten.
  google.protobuf.FieldMask update_mask = 1
      [(google.api.field_behavior) = OPTIONAL];

  // Required. The resource being updated
  AutonomousDatabase autonomous_database = 2
      [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 3 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `AutonomousDatabase.Delete`.
message DeleteAutonomousDatabaseRequest {
  // Required. The name of the resource in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 2 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `AutonomousDatabase.Restore`.
message RestoreAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Required. The time and date to restore the database to.
  google.protobuf.Timestamp restore_time = 2
      [(google.api.field_behavior) = REQUIRED];
}

// The request for `AutonomousDatabase.Stop`.
message StopAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `AutonomousDatabase.Start`.
message StartAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `AutonomousDatabase.Restart`.
message RestartAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `OracleDatabase.SwitchoverAutonomousDatabase`.
message SwitchoverAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Required. The peer database name to switch over to.
  string peer_autonomous_database = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `OracleDatabase.FailoverAutonomousDatabase`.
message FailoverAutonomousDatabaseRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Required. The peer database name to fail over to.
  string peer_autonomous_database = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];
}

// The request for `AutonomousDatabase.GenerateWallet`.
message GenerateAutonomousDatabaseWalletRequest {
  // Required. The name of the Autonomous Database in the following format:
  // projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/AutonomousDatabase"
    }
  ];

  // Optional. The type of wallet generation for the Autonomous Database. The
  // default value is SINGLE.
  GenerateType type = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. True when requesting regional connection strings in PDB connect
  // info, applicable to cross-region Data Guard only.
  bool is_regional = 3 [(google.api.field_behavior) = OPTIONAL];

  // Required. The password used to encrypt the keys inside the wallet. The
  // password must be a minimum of 8 characters.
  string password = 4 [(google.api.field_behavior) = REQUIRED];
}

// The response for `AutonomousDatabase.GenerateWallet`.
message GenerateAutonomousDatabaseWalletResponse {
  // Output only. The base64 encoded wallet files.
  bytes archive_content = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// The request for `AutonomousDbVersion.List`.
message ListAutonomousDbVersionsRequest {
  // Required. The parent value for the Autonomous Database in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/AutonomousDbVersion"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 Autonomous DB Versions will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `AutonomousDbVersion.List`.
message ListAutonomousDbVersionsResponse {
  // The list of Autonomous Database versions.
  repeated AutonomousDbVersion autonomous_db_versions = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `AutonomousDatabaseCharacterSet.List`.
message ListAutonomousDatabaseCharacterSetsRequest {
  // Required. The parent value for the Autonomous Database in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/AutonomousDatabaseCharacterSet"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 Autonomous DB Character Sets will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request. Only the
  // **character_set_type** field is supported in the following format:
  // `character_set_type="{characterSetType}"`. Accepted values include
  // `DATABASE` and `NATIONAL`.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `AutonomousDatabaseCharacterSet.List`.
message ListAutonomousDatabaseCharacterSetsResponse {
  // The list of Autonomous Database Character Sets.
  repeated AutonomousDatabaseCharacterSet autonomous_database_character_sets =
      1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `AutonomousDatabaseBackup.List`.
message ListAutonomousDatabaseBackupsRequest {
  // Required. The parent value for ListAutonomousDatabaseBackups in the
  // following format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/AutonomousDatabaseBackup"
    }
  ];

  // Optional. An expression for filtering the results of the request. Only the
  // **autonomous_database_id** field is supported in the following format:
  // `autonomous_database_id="{autonomous_database_id}"`. The accepted values
  // must be a valid Autonomous Database ID, limited to the naming
  // restrictions of the ID: ^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$).
  // The ID must start with a letter, end with a letter or a number, and be
  // a maximum of 63 characters.
  string filter = 5 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 Autonomous DB Backups will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 4 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `AutonomousDatabaseBackup.List`.
message ListAutonomousDatabaseBackupsResponse {
  // The list of Autonomous Database Backups.
  repeated AutonomousDatabaseBackup autonomous_database_backups = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `ExadbVmCluster.Create`.
message CreateExadbVmClusterRequest {
  // Required. The value for parent of the ExadbVmCluster in the following
  // format: projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/ExadbVmCluster"
    }
  ];

  // Required. The ID of the ExadbVmCluster to create. This value is
  // restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  // 63 characters in length. The value must start with a letter and end with a
  // letter or a number.
  string exadb_vm_cluster_id = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The resource being created.
  ExadbVmCluster exadb_vm_cluster = 3 [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional request ID to identify requests. Specify a unique
  // request ID so that if you must retry your request, the server will know to
  // ignore the request if it has already been completed. The server will
  // guarantee that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request
  // ID, the server can check if original operation with the same request ID
  // was received, and if so, will ignore the second request. This prevents
  // clients from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 4 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `ExadbVmCluster.Delete`.
message DeleteExadbVmClusterRequest {
  // Required. The name of the ExadbVmCluster in the following format:
  // projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/ExadbVmCluster"
    }
  ];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 2 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `ExadbVmCluster.Get`.
message GetExadbVmClusterRequest {
  // Required. The name of the ExadbVmCluster in the following format:
  // projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/ExadbVmCluster"
    }
  ];
}

// The request for `ExadbVmCluster.List`.
message ListExadbVmClustersRequest {
  // Required. The parent value for ExadbVmClusters in the following format:
  // projects/{project}/locations/{location}.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "oracledatabase.googleapis.com/ExadbVmCluster"
    }
  ];

  // Optional. The maximum number of items to return.
  // If unspecified, at most 50 ExadbVmClusters will be returned.
  // The maximum value is 1000; values above 1000 will be coerced to 1000.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for filtering the results of the request.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. An expression for ordering the results of the request.
  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
}

// The response for `ExadbVmCluster.List`.
message ListExadbVmClustersResponse {
  // The list of ExadbVmClusters.
  repeated ExadbVmCluster exadb_vm_clusters = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;
}

// The request for `ExadbVmCluster.Update`. We only support adding the
// Virtual Machine to the ExadbVmCluster. Rest of the fields in ExadbVmCluster
// are immutable.
message UpdateExadbVmClusterRequest {
  // Optional. A mask specifying which fields in th VM Cluster should be
  // updated. A field specified in the mask is overwritten. If a mask isn't
  // provided then all the fields in the VM Cluster are overwritten.
  google.protobuf.FieldMask update_mask = 1
      [(google.api.field_behavior) = OPTIONAL];

  // Required. The resource being updated.
  ExadbVmCluster exadb_vm_cluster = 2 [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 3 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// The request for `ExadbVmCluster.RemoveVirtualMachine`.
message RemoveVirtualMachineExadbVmClusterRequest {
  // Required. The name of the ExadbVmCluster in the following format:
  // projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "oracledatabase.googleapis.com/ExadbVmCluster"
    }
  ];

  // Optional. An optional ID to identify the request. This value is used to
  // identify duplicate requests. If you make a request with the same request ID
  // and the original request is still in progress or completed, the server
  // ignores the second request. This prevents clients from
  // accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 3 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];

  // Required. The list of host names of db nodes to be removed from the
  // ExadbVmCluster.
  repeated string hostnames = 4 [(google.api.field_behavior) = REQUIRED];
}
