oracle tablespace file 文件名乱码更正

参考 https://blog.51cto.com/maclean/1278181

今天看表空间文件名子编号不太好看(c09.dbf -> c010.dbf),强迫症想改回来

SQL:

alter tablespace [TABLESPACE_NAME] offline;

命令行:

mv /a/b/c010.dbf /a/b/c10.dbf

提示没有文件!?

ll /a/b/c*

列出的部分文件名带问号??!

/a/b/c010.dbf?
/a/b/c01.dbf
/a/b/c02.dbf
/a/b/c03.dbf
/a/b/c04.dbf
/a/b/c05.dbf?
/a/b/c06.dbf?
/a/b/c07.dbf?
/a/b/c08.dbf?
/a/b/c09.dbf?

强迫症,删除问号

mv /a/b/c05.dbf? /a/b/c05.dbf
mv /a/b/c06.dbf? /a/b/c06.dbf
mv /a/b/c07.dbf? /a/b/c07.dbf
mv /a/b/c08.dbf? /a/b/c08.dbf
mv /a/b/c09.dbf? /a/b/c05.dbf
mv /a/b/c010.dbf? /a/b/c10.dbf

修改数据库

alter table [TABLESPACE_NAME] rename datafile '/a/b/c010.dbf' to/a/b/c10.dbf’;

提示没有 ‘/a/b/c010.dbf’ ???!!
想起刚才改名里的问号“?”!!

select file_name from dba_data_files where tablespace_name = '[TABLESPACE_NAME]';

没看出个啥。
换sql图形化工具(plsql,dbvis)再执行一次
双击结果,发现问题了,正常file_name内容只有一行,有问题的居然是两行,那个文件系统的问号,是一个未知符号造成换行。就是一个乱码
怎么改名?

1、直接打问号,失败
2、转义问号,失败
3、把换行用hex显示出来,失败了
4、搜到把数据库重启到mounted状态,然后alter system rename file …,但是还是一样有 换行/问号 问题,都懒得试了
5、用文件id代替文件名改名,找不到教程

最后终于找到这篇
https://blog.51cto.com/maclean/1278181

方法一好复杂。
方法二搜出文件名原文作为 alter tablespace rename 的变量执行。
方法三用rman。
我最终用方法二处理完成。
为免原文被删除。以下我再拷贝一份

方法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;
/

方法3.RMAN
`在这里插入代码片RMAN> copy datafile 20 to ‘/s01/rename1.dbf’;

copy datafile 20 to '/s01/rename1.dbf';
switch datafile 20 to copy;
recover datafile 20;
sql ' alter database datafile 20 online';

直接使用RMAN COPY+ SWITCH DATAFILE TO COPY或者SETNAME都可以代劳帮助你解决该问题,因为RMAN可以直接使用FILE#指代而不需要如ALTER DATABASE RENAME FILE这样必须输入员文件名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值