AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 179989
Accepted
Joe Joy Valiyaveettil
Joe Joy Valiyaveettil
Asked: 2017-07-18 02:14:44 +0800 CST2017-07-18 02:14:44 +0800 CST 2017-07-18 02:14:44 +0800 CST

Oracle 11g Rman 从 Windows 平台的备份中恢复另一个数据库名称

  • 772

任何人都可以分享在 oracle 11g(Windows 平台)中使用另一个数据库名称将 RMAN 还原到另一台服务器的正确方法。我对我发现的所有 RMAN 恢复方法感到完全困惑。我已经使用命令进行了备份

BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

请确认是否需要单独备份控制文件。

任何帮助将不胜感激。

oracle oracle-11g-r2
  • 1 1 个回答
  • 31684 Views

1 个回答

  • Voted
  1. Best Answer
    CaM
    2017-07-18T10:07:40+08:002017-07-18T10:07:40+08:00

    默认情况下,控制文件与您的数据一起备份。这由以下命令打开或关闭:

    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    

    但作为一个习惯问题,我通常会遵循以下数据备份:

    backup current controlfile ;
    backup spfile ;
    

    在 Windows 上使用重复数据库时遇到了很多麻烦。通常,我会遇到目标登录的 NTS 权限失败,这会阻止创建辅助数据库。我努力解决这些错误......好吧,我放弃了。

    这使我起草了一份“剧本”文档,其中包含手动将数据库恢复到具有新实例名称的新服务器所需的所有各种操作系统和 RMAN 命令。这也让我可以更好地控制新主机。

    这些脚本在我的 Oracle 12.1 Windows 环境中进行了测试,但可能不适合您的环境。例如,我知道 RMAN 更愿意在 12c 中运行 SQL 语句而不是在 11g 中。希望他们有所帮助。

    这些脚本是通过多次试验和错误努力创建的,基于此用于还原的链接和用于更改 SID的链接。步骤是:

    确保所有内容都已备份。

    我喜欢获取 spfile 和 controlfile 的新副本,因为这样以后会更容易。

    backup device type disk incremental level = 0 section size 1g database plus archivelog;
    backup current controlfile tag='Controlfile Level 0';
    backup spfile tag='SPFile Level 0';
    

    如果您的旧服务器和新服务器对 Oracle 数据使用不同的文件路径,请运行以下命令:

    select '  Set Newname For Datafile ' || file# || ' to ''' || name || ''';' from v$datafile;
    select '  Alter Database Rename File ''' || Member || ''' To ''' || Member || ''';' from v$logfile;
    

    获取输出并根据需要更改路径/文件名以匹配您的新环境。

    将备份从旧主机复制到新主机

    可选,但我喜欢将 RMAN 备份文件放在我要还原到的盒子上。所以登录新服务器,从旧服务器的快速恢复区复制完整备份、归档日志和自动备份文件夹。请注意,您只需要返回到最近的完整备份,无需获取数周的文件。

    暂存新实例

    在新主机上,创建数据文件夹、快速恢复文件夹和管理员文件夹。确保已安装 Oracle,并且 Oracle 用户帐户可以完全控制这些文件夹。

    创建一个与旧实例同名的空实例:

    oradim -new -sid <<old sid name>>
    
    Set ORACLE_SID=<<old sid name>>
    RMAN target /
    

    使用 RMAN 恢复 SPFILE 和控制文件。在 RMAN 中,设置 DBID 以匹配旧实例的 DB ID,并设置文件名和路径以匹配您的环境:

    SET DBID=1234567;
    startup nomount;
    restore spfile to 'C:\Oracle\Product\12.1.0\dbhome_1\database\init<<Old sid>>/ora' from 'f:\fast_recovery_area\<<old sid>>\BackupSet\2017_07_17\O1_MF_NNSNF_SPFILE_LEVEL_0_DOSTOJT8_.BKP';
    create pfile='c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora' from spfile='c:\oracle\product\12.1.0\dbhome_1\Database\Init<<old sid>>.ora';
    shutdown immediate;
    

    暂时不要关闭 RMAN。在 NotePad 或 NotePad++ 中编辑上一步中的 pfile。根据需要调整路径和内存要求以反映新环境。不要更改数据库的名称,而是将文件夹路径更改为新的实例名称。

    返回到您的 RMAN 会话并恢复控制文件。同样,根据需要修复路径。

    startup nomount pfile = 'c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora’;
    restore controlfile from 'F:\fast_recovery\<<old sid>>\BACKUPSET\2017_07_05\O1_MF_NCNNF_CONTROLFILE_LEVEL_0_DOSTO715_.BKP';
    Alter Database Mount;
    

    恢复您的数据库文件

    仍然在 RMAN 中,清点您复制的备份文件。

     catalog start with 'f:\fast_recovery_Area\<<old sid>>';
    

    现在将您的重做日志文件移动到它们在 RMAN 中的新文件夹中。您之前生成了这些脚本。

    Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO03.LOG' To 'f:\ORADATA\<<NEW sid>>\REDO03.LOG';
    Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO02.LOG' To 'f:\ORADATA\<<new sid>>\REDO02.LOG';
    Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO01.LOG' To 'f:\ORADATA\<<NEW Sid>>\REDO01.LOG';
    

    现在我们进行还原和恢复,替换之前创建的 NewName 脚本。

    run { 
        Set Newname For Datafile 1 to 'f:\ORADATA\<<new sid>>\SYSTEM01.DBF';
        Set Newname For Datafile 3 to 'f:\ORADATA\<<new sid>>\SYSAUX01.DBF';
        Set Newname For Datafile 5 to 'f:\ORADATA\<<new sid>>\UNDOTBS01.DBF';
        Set Newname For Datafile 6 to 'f:\ORADATA\<<new sid>>\USERS01.DBF';
    
        RESTORE DATABASE;
        SWITCH DATAFILE ALL;
        RECOVER DATABASE;
    }
    

    RMAN 完成基本还原和恢复后,创建一个新的 SPFile。

    create spfile from pfile = 'c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<OLD sid>>.ora’;
    alter database open resetlogs;
    

    Oracle 不备份或恢复 TEMP 表空间。这将阻止完全恢复成功。创建一个新的临时表空间,删除旧的,然后重建原来的。

    CREATE TEMPORARY TABLESPACE TEMP_NEW TEMPFILE 'f:\OraData\<<NEW Sid>>\TempNew1.dbf' SIZE 5m autoextend on next 10m maxsize unlimited;
    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_NEW;
    DROP TABLESPACE TEMP including contents;
    CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'f:\OraData\<<NEW Sid>>\Temp01.dbf' SIZE 50m autoextend on next 10m maxsize unlimited;
    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
    DROP TABLESPACE TEMP_NEW including contents and datafiles;
    

    更改实例名称

    此时,Oracle 应该正在运行您的数据库的完全恢复副本。但是你想要一个新名字。在 RMAN 中:

    Shutdown immediate;
    Startup mount;
    

    不要关闭 RMAN,而是从以管理员身份运行的新 CMD 窗口:

     set ORACLE_SID=<<old sid>>
     NID target=/ DBNAME=<<new sid>>
    

    请注意这为您提供的 DBID,因为稍后您将需要它来进行灾难恢复(请注意,这是我们在顶部的第一个 RMAN 命令)。

    返回 RMAN 窗口:

    Shutdown Immediate;
    Startup Mount;
    Alter System Set DB_NAME=<<New sid>> scope=SPFILE;
    Shutdown Immediate;
    exit;
    

    启动你的新数据库!

    在另一个 CMD 窗口中,创建一个新密码文件,然后重新创建 Windows 服务。请注意,与 Oracle 中的大多数情况不同,此实用程序不会在路径周围使用引号。

    orapwd file=c:\oracle\product\12.1.0\dbhome_1\Database\pwd<<new SID>>.ora password=<SYS pwd> entries=25
    oradim -delete -sid <<old sid>>
    oradim -new -sid <<new sid>> -intpwd <SYS pwd> -startmode a 
    

    启动数据库。

    Set Oracle_SID=<<new sid>>
    lsnrctl reload
    sqlplus / as sysdba
    Startup Mount;
    Alter Database Open ResetLogs;
    

    备份您的新数据库

    此时,您的数据库没有备份。在此数据库中执行任何工作之前,请执行 RMAN 备份。

    • 5

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve