שינוי האזור הראשי של מסד נתונים

בדף הזה מוסבר איך לשנות את האזור הראשי של מסד נתונים. אפשר לשנות את האזור הראשי של מופע Spanner רק אם המופע מוגדר בשני אזורים או במספר אזורים. האזור החדש שמוגדר כראשי חייב להיות אחד משני האזורים עם הרשאות קריאה וכתיבה בהגדרה של שני אזורים או הגדרה של מספר אזורים במסד הנתונים. מידע נוסף על שינוי האזור הראשי זמין במאמר הגדרת האזור הראשי שמוגדר כברירת מחדל.

כדי לראות את נתוני ההתפלגות של הלידים במסד נתונים של מופע דו-אזורי או רב-אזורי, פותחים את מסוף Google Cloud ומעיינים בתרשימים של התפלגות הלידים. מידע נוסף זמין במאמר תרשימים ומדדים של Spanner.

שינוי האזור הראשי של מסד נתונים

אפשר לשנות את האזור הראשי של מסד נתונים. כדי לעקוב אחרי ההתקדמות של השינוי הזה, אפשר לעיין בתרשים של חלוקת המנהיגים.

המסוף

  1. נכנסים לדף Spanner Instances במסוף Google Cloud .

    כניסה לדף Instances

  2. לוחצים על שם המופע שמכיל את מסד הנתונים שרוצים לשנות את האזור הראשי שלו.

  3. לוחצים על מסד הנתונים שרוצים לשנות את האזור הראשי שלו.

  4. לוחצים על סמל העיפרון לצד אזור מוביל.

  5. משנים את הצהרת ה-DDL עם האזור הראשי שנבחר בתור default_leader.

gcloud

  1. כדי לשנות את האזור הראשי של מסד נתונים קיים, מריצים את הפקודה הבאה:

    gcloud spanner databases ddl update DATABASE_NAME \
    --instance=INSTANCE_ID \
    --ddl='ALTER DATABASE `DATABASE_NAME` \
     SET OPTIONS ( default_leader = "REGION" )'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • DATABASE_NAME: השם של מסד הנתונים.
    • INSTANCE_ID: המזהה של מופע מסד הנתונים.
    • REGION: האזור שרוצים להגדיר כמנהיג ברירת המחדל.

ספריות לקוח

C#‎


using Google.Cloud.Spanner.Admin.Database.V1;
using Google.Cloud.Spanner.Common.V1;
using Google.LongRunning;
using Google.Protobuf.WellKnownTypes;
using System;
using System.Threading.Tasks;

public class UpdateDatabaseWithDefaultLeaderAsyncSample
{
    public async Task<Operation<Empty, UpdateDatabaseDdlMetadata>> UpdateDatabaseWithDefaultLeaderAsync(string projectId, string instanceId, string databaseId, string defaultLeader)
    {
        DatabaseAdminClient databaseAdminClient = await DatabaseAdminClient.CreateAsync();

        var alterDatabaseStatement = @$"ALTER DATABASE `{databaseId}` SET OPTIONS
                   (default_leader = '{defaultLeader}')";

        // Create the UpdateDatabaseDdl request and execute it.
        var request = new UpdateDatabaseDdlRequest
        {
            DatabaseAsDatabaseName = DatabaseName.FromProjectInstanceDatabase(projectId, instanceId, databaseId),
            Statements = { alterDatabaseStatement }
        };
        var operation = await databaseAdminClient.UpdateDatabaseDdlAsync(request);

        // Wait until the operation has finished.
        Console.WriteLine("Waiting for the operation to finish.");
        Operation<Empty, UpdateDatabaseDdlMetadata> completedResponse = await operation.PollUntilCompletedAsync();
        if (completedResponse.IsFaulted)
        {
            Console.WriteLine($"Error while updating database: {completedResponse.Exception}");
            throw completedResponse.Exception;
        }

        Console.WriteLine("Updated default leader");
        return completedResponse;
    }
}

C++‎

void UpdateDatabaseWithDefaultLeader(
    google::cloud::spanner_admin::DatabaseAdminClient client,
    std::string const& project_id, std::string const& instance_id,
    std::string const& database_id, std::string const& default_leader) {
  google::cloud::spanner::Database database(project_id, instance_id,
                                            database_id);
  std::vector<std::string> statements;
  statements.push_back("ALTER DATABASE `" + database_id + "` " +
                       "SET OPTIONS (default_leader='" + default_leader + "')");
  auto metadata =
      client.UpdateDatabaseDdl(database.FullName(), std::move(statements))
          .get();
  if (!metadata) throw std::move(metadata).status();
  std::cout << "`default_leader` altered, new DDL metadata:\n"
            << metadata->DebugString();
}

המשך

import (
	"context"
	"fmt"
	"io"
	"regexp"

	database "cloud.google.com/go/spanner/admin/database/apiv1"
	adminpb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb"
)

// updateDatabaseWithDefaultLeader updates the default leader for a given database
func updateDatabaseWithDefaultLeader(w io.Writer, db string, defaultLeader string) error {
	// db = `projects/<project>/instances/<instance-id>/database/<database-id>`
	// defaultLeader = `nam3`
	matches := regexp.MustCompile("^(.+)/databases/(.+)$").FindStringSubmatch(db)
	if matches == nil || len(matches) != 3 {
		return fmt.Errorf("updateDatabaseWithDefaultLeader: invalid database id %q", db)
	}

	ctx := context.Background()
	adminClient, err := database.NewDatabaseAdminClient(ctx)
	if err != nil {
		return err
	}
	defer adminClient.Close()

	op, err := adminClient.UpdateDatabaseDdl(ctx, &adminpb.UpdateDatabaseDdlRequest{
		Database: db,
		Statements: []string{
			fmt.Sprintf(
				"ALTER DATABASE `%s` SET OPTIONS (default_leader = '%s')",
				matches[2], defaultLeader,
			),
		},
	})
	if err != nil