func()

in oracle/pkg/database/provision/bootstrap_database_task.go [656:733]


func (task *BootstrapTask) renameDatabase(ctx context.Context) error {

	if !task.cdbRenaming {
		return nil
	}

	// Prepare a SPFile.
	i := initFileInput{
		SourceDBName: task.db.GetSourceDatabaseName(),
		DestDBName:   task.db.GetDatabaseName(),
	}
	initOraFileContent, err := i.LoadInitOraTemplate(task.db.GetVersion())
	if err != nil {
		return err
	}

	initOraFileName := fmt.Sprintf("init%s.ora", task.db.GetDatabaseName())
	dbsDir := filepath.Join(task.db.GetDatabaseHome(), "dbs")

	lByte := []byte(initOraFileContent)
	if err := ioutil.WriteFile(filepath.Join(dbsDir, initOraFileName), lByte, 0600); err != nil {
		return err
	}
	klog.InfoS("renameDatabase: prepare init file succeeded")

	// Start the database.
	if _, err := task.dbdClient.BounceDatabase(ctx, &dbdpb.BounceDatabaseRequest{
		Operation:         dbdpb.BounceDatabaseRequest_STARTUP,
		DatabaseName:      task.db.GetSourceDatabaseName(),
		Option:            "mount",
		AvoidConfigBackup: true,
	}); err != nil {
		return fmt.Errorf("renameDatabase: startup mount failed: %v", err)
	}
	klog.InfoS("renameDatabase: startup mount succeeded")

	// running NID to change the DBID not the name of the database.
	if _, err := task.dbdClient.NID(ctx, &dbdpb.NIDRequest{
		Sid:          task.db.GetSourceDatabaseName(),
		DatabaseName: task.db.GetDatabaseName(),
	}); err != nil {
		return fmt.Errorf("nid cmd failed: %v", err)
	}
	klog.InfoS("renameDatabase: nid command succeeded")

	if _, err := task.dbdClient.BounceDatabase(ctx, &dbdpb.BounceDatabaseRequest{
		Operation:         dbdpb.BounceDatabaseRequest_STARTUP,
		DatabaseName:      task.db.GetDatabaseName(),
		Option:            "mount",
		AvoidConfigBackup: true,
	}); err != nil {
		return fmt.Errorf("renameDatabase: shutdown failed: %v", err)
	}
	klog.InfoS("renameDatabase: startup succeeded after nid command")

	sqlResp, err := runSQLPlus(ctx, task.db.GetVersion(), task.db.GetDatabaseName(), []string{"alter database open resetlogs"},
		false)
	if err != nil {
		return fmt.Errorf("renameDatabase: resetlogs failed: %v", err)
	}
	klog.InfoS("reset logs after database move succeeded", "output", sqlResp)

	if _, err := runSQLPlus(ctx, task.db.GetVersion(), task.db.GetDatabaseName(), []string{"CREATE SPFILE from PFILE"}, false); err != nil {
		return fmt.Errorf("renameDatabase: spfile generation succeeded: %v", err)
	}
	klog.InfoS("spfile generation succeeded")

	klog.InfoS("shutting database ")
	if _, err := task.dbdClient.BounceDatabase(ctx, &dbdpb.BounceDatabaseRequest{
		Operation:    dbdpb.BounceDatabaseRequest_SHUTDOWN,
		DatabaseName: task.db.GetDatabaseName(),
	}); err != nil {
		return fmt.Errorf("renameDatabase: shutdown failed: %v", err)
	}

	klog.InfoS("renameDatabase: executed successfully")
	return nil
}