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 / 问题 / 55807
Accepted
Atilla Ozgur
Atilla Ozgur
Asked: 2013-12-31 04:31:51 +0800 CST2013-12-31 04:31:51 +0800 CST 2013-12-31 04:31:51 +0800 CST

当文件不存在时重命名数据文件

  • 772

我正在尝试在测试虚拟机中克隆我们的生产数据库。我们的生产数据库使用 ASM。我想在测试数据库中使用普通文件系统。

我创建了数据库、服务、pfile 等。我将生产数据库控制文件提供给测试数据库。现在我正在尝试重命名测试数据库中的数据文件。我收到以下错误。

 SQL> startup mount;
  .....
 SQL> alter database rename file '+NEWDATA/XX/XX01.dbf' to      'M:\oracle\datafiles\XX\XX01.dbf'; alter database rename file
 '+NEWDATA/XX/XX01.dbf' to 'M:\oracle\datafiles\XX\XX01.dbf';
* ERROR at line 1: ORA-01511: error in renaming log/data files ORA-01141: error renaming data file 162 - new file
'M:\oracle\datafiles\XX\XX01.dbf' not found ORA-01110: data file 162:
'+NEWDATA/XX/XX01.dbf' ORA-27046: file size is not a multiple of
logical block size OSD-04012: file size mismatch O/S-Error: (OS 4) The
system cannot open the file.

我的备份是正常的 rman 备份,而不是作为副本备份。我正在尝试重命名不存在的文件。在这个重命名过程之后,我将尝试从 rman 备份中恢复数据库。但是这个备份不是一个个的拷贝。

oracle oracle-10g-r2
  • 3 3 个回答
  • 9562 Views

3 个回答

  • Voted
  1. Balazs Papp
    2014-01-01T05:31:45+08:002014-01-01T05:31:45+08:00

    你写了:

    在这个重命名过程之后,我将尝试从 rman 备份中恢复数据库。但是这个备份不是一个个的拷贝。

    那么这不是这样做的方法。为了使用 ALTER DATABASE RENAME FILE,该文件必须已经存在于新位置。取而代之的是,您可以(并且应该)在 RMAN 中处理它:

    sqlplus / as sysdba
    startup mount
    exit
    

    您已经完成了,然后:

    rman target /
    

    并运行以下命令:

    run
    {
      set newname for datafile '+NEWDATA/XX/XX01.dbf' to 'M:\oracle\datafiles\XX\XX01.dbf';
      set newname for datafile '+NEWDATA/XX/XX02.dbf' to 'M:\oracle\datafiles\XX\XX02.dbf';
      set newname for datafile '+NEWDATA/XX/XX03.dbf' to 'M:\oracle\datafiles\XX\XX03.dbf';
      # ..., list all datafiles this way
      # alternatively you can use the datafile number: set newname for datafile 1 to '.../...dbf';
    
      restore database;
      switch datafile all;
      recover database;
    }
    
    • 4
  2. Mindaugas Riauba
    2013-12-31T05:04:31+08:002013-12-31T05:04:31+08:00

    重命名数据文件时,您必须先将其移动到新位置。ALTER DATABASE RENAME FILE命令不移动文件。它只是更改控制文件中的文件记录。但是目标文件必须存在。

    重命名和重定位数据文件

    • -1
  3. Best Answer
    Atilla Ozgur
    2013-12-31T23:23:00+08:002013-12-31T23:23:00+08:00

    重命名数据文件时,通常必须满足以下条件。

    • 数据库处于挂载阶段,或者表空间处于脱机状态
    • 数据文件应该存在

    我的条件满足第一个。数据库处于挂载阶段。但是当我尝试重命名数据文件时,它会要求文件。我没有正确的文件,因为我会尝试从备份中恢复它。但是 oracle 只要求文件中的正确大小(ORA-27046:文件大小不是逻辑块大小的倍数)。此文件不必是正确的文件。因此创建具有正确大小的虚拟文件,块大小的倍数。如何实现这一点。

    在 Windows 中使用 powershell

    $datafile = "M:\oracle\datafiles\XX\XX01.dbf"
    $f = new-object System.IO.FileStream $datafile, Create, ReadWrite
    $f.SetLength(20MB)
    $f.Close()
    

    在 windows fsutil中

    fsutil file createnew <filename> <length>
    fsutil file createnew M:\oracle\datafiles\XX\XX01.dbf  20M
    

    在Linux中

    fallocate -l 20M app/oracle/datafiles/XX/XX01.dbf
    

    创建文件后,您可以使用正常的alter database rename 命令。

     alter database rename file '+NEWDATA/XX/XXX.dbf' to 'M:\oracle\datafiles\XX\XXX.dbf';
    
    • -2

相关问题

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

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

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

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

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

Sidebar

Stats

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

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • 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
    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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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