zoukankan      html  css  js  c++  java
  • 如何rename datafile name中存在乱码的数据文件

    存在这样的情况create tablespace.. datafile or alter tablespace add datafile时加入数据文件的datafile name中存在乱码,例如以下例子:  
    SQL> select file#,name from v$datafile where file#=20;
    
         FILE# NAME
    ---------- --------------------------------------------------
            20 /s01/锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟dbf
    
    SQL> alter database rename file '/s01/锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟dbf' to '/s01/rename.dbf';
    alter database rename file '/s01/锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟dbf' to '/s01/rename.dbf'
    *
    ERROR at line 1:
    ORA-01511: error in renaming log/data files
    ORA-01516: nonexistent log file, datafile, or tempfile
    "/s01/锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟dbf"
        以上直接rename存在乱码的数据文件可能遇到ORA-01516错误,对于这种由于存在乱码导致的数据文件管理问题,可以参考以下几种方案: 方法1. 通过alter database backup controlfile to trace; 修改backup controlfile to trace生成的CREATE CONTROLFILE脚本,把存在乱码的数据文件名修改为目标文件名; 这种方法稍微费力一点.............   方法2. 通过以下动态SQL执行alter database rename来修改数据文件名:    
    declare
    x varchar2(600);
    y varchar2(600);
    begin
    y:='/s01/rename.dbf';
    select file_name into x from dba_data_files where file_id=20;
    execute immediate 'alter database  rename file  '''||x||''' to '''||y||'''';
    end;
    /
    
    PL/SQL procedure successfully completed.
    
    SQL> select name,file# from v$datafile where file#=20;
    
    NAME
    --------------------------------------------------------------------------------
         FILE#
    ----------
    /s01/rename.dbf
            20
      这种方法通过动态SQL不涉及到乱码的输出和装换所以可以成功。请注意ONLINE 该数据文件!!   方法3.    
    RMAN> copy datafile 20 to '/s01/rename1.dbf';
    
    RMAN> switch datafile 20 to copy
    2> ;
    
    datafile 20 switched to datafile copy "/s01/rename1.dbf"
    
    RMAN> recover datafile 20;                  
    
    RMAN> sql ' alter database datafile 20 online';
    
    sql statement:  alter database datafile 20 online
        直接使用RMAN COPY+ SWITCH DATAFILE TO COPY或者SETNAME都可以代劳帮助你解决该问题,因为RMAN可以直接使用FILE#指代而不需要如ALTER DATABASE RENAME FILE这样必须输入员文件名。
  • 相关阅读:
    【C#高级】泛型(一)
    【C#】RGB转CMYK
    C#读写Excel
    H5+MUI上传文件
    完整登录流程包含第三方登录,很详细值得推荐
    [MVC]多文件、超大文件上传
    [SQL Server] 无法连接到本地数据库
    “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
    MVC缓存(二)
    MVC缓存(一)
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2968111.html
Copyright © 2011-2022 走看看