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
}