relocate and rename datafile 方法、示例

本文介绍了Oracle数据库中两种重命名数据文件的方法:alter database rename file 和 alter tablespace renamedatafile。提供了详细的步骤和示例,包括离线表空间、复制文件及更改数据库控制文件记录等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 对于rename datafile方法有两种,可以分为
        alter database  rename file ... to ...
        alter tablespace ... rename datafile ... to ...
        关于这两种方法,官网链接如下
http://docs.oracle.com/cd/E11882_01/server.112/e25494/tspaces.htm#ADMIN12490

 一 . alter database rename file  ... to ...方法、示例

这种方法适用于所有的数据文件,包含system数据文件
需要注意的是,
        rename到目标位置的数据文件,必须手动拷贝到目标位置,alter database  rename file ... to ...命令不会去创建文件。
步骤如下
    To rename datafiles of several tablespaces in one operation or to rename 
datafiles of the SYSTEM tablespace, you must have the ALTER DATABASE system
privilege. 
1.Ensure that the database is mounted but closed. 

2.Copy the datafiles to be renamed to their new locations and new names, using operating system commands. 

3.Make sure the new copies of the datafiles have different fully specified filenames from the datafiles currently in use. 

4.Use the SQL statement ALTER DATABASE to rename the file pointers in the database's control file. 

5.Open the database.

6.Back up the database. After making any structural changes to a database, always perform an immediate and complete backup
        
示例如下
变更前检查数据文件所在路径

  1. > select file_name,tablespace_name from dba_data_files;

  2. FILE_NAME TABLESPACE_NAME
  3. -------------------------------------------------------------------------------- ------------------------------
  4. /s01/oracle/app/oracle/oradata/test/system01.dbf SYSTEM
  5. /s01/oracle/app/oracle/oradata/test/sysaux01.dbf SYSAUX
  6. /s01/oracle/app/oracle/oradata/test/undotbs01.dbf UNDOTBS1
  7. /s01/oracle/app/oracle/oradata/test/users01.dbf USERS
  8. /s01/oracle/app/oracle/oradata/test/users02.dbf USERS
1. 确认当前数据库处于closed但mount状态

  1. > shutdown immediate
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
  5. > startup mount;
  6. ORACLE instance started.

  7. Total System Global Area 839282688 bytes
  8. Fixed Size 2257880 bytes
  9. Variable Size 784337960 bytes
  10. Database Buffers 50331648 bytes
  11. Redo Buffers 2355200 bytes
  12. Database mounted.
2. 手动将数据文件拷贝到新的位置,示例中将    
    /
s01/oracle/app/oracle/oradata/test/users02.dbf 和/s01/oracle/app/oracle/oradata/test/temp01.dbf 
    rename 到 
/home/oracle/user.dbf和/home/oracle/temp.dbf
3. 确认已经将数据文件拷贝到目标位置

  1. [oracle@uumile ~]$ cd /s01/oracle/app/oracle/oradata/test/
  2. [oracle@uumile test]$ cp users02.dbf /home/oracle/user.dbf
  3. [oracle@uumile test]$ cp temp01.dbf /home/oracle/temp.dbf
  4. [oracle@uumile ~]$ cd /home/oracle
  5. [oracle@uumile ~]$ ls -*.dbf
  6. -rw-r----- 1 oracle oinstall 20979712 Feb 26 13:40 temp.dbf
  7. -rw-r----- 1 oracle oinstall 10493952 Feb 26 13:39 user.dbf
4. 使用alter database rename file ... to ...命令修改控制文件中的数据文件路径指向。

  1. > alter database rename file \'/s01/oracle/app/oracle/oradata/test/temp01.dbf\',
  2.   2          '/s01/oracle/app/oracle/oradata/test/users02.dbf\'
  3.   3      to    '/home/oracle/temp.dbf\',
  4.   4             '/home/oracle/user.dbf\';

  5. Database altered.
5. open database 

  1. > alter database open;

  2. Database altered.

  3. > select file_name,tablespace_name from dba_data_files;

  4. FILE_NAME TABLESPACE_NAME
  5. -------------------------------------------------------------------------------- ------------------------------
  6. /s01/oracle/app/oracle/oradata/test/system01.dbf SYSTEM
  7. /s01/oracle/app/oracle/oradata/test/sysaux01.dbf SYSAUX
  8. /s01/oracle/app/oracle/oradata/test/undotbs01.dbf UNDOTBS1
  9. /s01/oracle/app/oracle/oradata/test/users01.dbf USERS
  10. /home/oracle/user.dbf USERS

  11. > select file_name,tablespace_name from dba_temp_files;

  12. FILE_NAME TABLESPACE_NAME
  13. -------------------------------------------------------------------------------- ------------------------------
  14. /home/oracle/temp.dbf TEMP
6. 备份全库。


二 . alter tablespace XXX rename datafile ... to ...方法、示例

这种方法适用于非system数据文件的rename,
这种方法同样需要手动拷贝数据文件到目标位置,alter tablespace XXX rename datafile ... to ... 命令不会去自动创建文件。
步骤如下

1.Take the non-SYSTEM tablespace that contains the datafiles offline. The database must be open
   
2.Copy the datafiles to the new location or new names using operating system 
commands. 
   
3.Make sure that the new, fully specified filenames are different from the old 
filenames. 
   
4.Use the SQL statement ALTER TABLESPACE with the RENAME DATAFILE option to 
change the filenames within the database. 

5.Bring the tablespace online

6. Back up the database. After making any structural changes to a database, always perform an immediate and complete backup


示例
rename前数据文件路径检查

  1. > select file_name,tablespace_name from dba_data_files;

  2. FILE_NAME TABLESPACE_NAME
  3. -------------------------------------------------------------------------------- ------------------------------
  4. /s01/oracle/app/oracle/oradata/test/system01.dbf SYSTEM
  5. /s01/oracle/app/oracle/oradata/test/sysaux01.dbf SYSAUX
  6. /s01/oracle/app/oracle/oradata/test/undotbs01.dbf UNDOTBS1
  7. /s01/oracle/app/oracle/oradata/test/users01.dbf USERS
  8. /home/oracle/user.dbf USERS
1. 需要rename的数据文件所在的tablespace offline

  1. > alter tablespace users offline normal;

  2. Tablespace altered.
2. 手动拷贝数据文件到目标位置

  1. [oracle@uumile ~]$ pwd
  2. /home/oracle
  3. [oracle@uumile ~]$ cp user.dbf /s01/oracle/app/oracle/oradata/test/users02.dbf
3. 确认数据文件已经拷贝成功

  1. [oracle@uumile ~]$ cd /s01/oracle/app/oracle/oradata/test/
  2. [oracle@uumile test]$ ls users02.dbf 
  3. users02.dbf
4. 使用alter tablespace 命令rename datafile 到目标位置

  1. > alter tablespace users rename datafile  '/home/oracle/user.dbf' to 
  2.   2 '/s01/oracle/app/oracle/oradata/test/users02.dbf';

  3. Tablespace altered.
5. 将目标表空间online,并检查数据文件路径

  1. > alter tablespace users online;

  2. Tablespace altered.

  3. > select file_name,tablespace_name from dba_data_files;

  4. FILE_NAME TABLESPACE_NAME
  5. -------------------------------------------------------------------------------- ------------------------------
  6. /s01/oracle/app/oracle/oradata/test/system01.dbf SYSTEM
  7. /s01/oracle/app/oracle/oradata/test/sysaux01.dbf SYSAUX
  8. /s01/oracle/app/oracle/oradata/test/undotbs01.dbf UNDOTBS1
  9. /s01/oracle/app/oracle/oradata/test/users01.dbf USERS
  10. /s01/oracle/app/oracle/oradata/test/users02.dbf USERS
6. 备份全库。



这里需要注意的是,temporary tablespace 是不能offline的,但是temporary tablespace的tempfile可以offline。
官网链接如下
http://docs.oracle.com/cd/E11882_01/server.112/e25494/tspaces.htm#ADMIN11369

### 使用 `_relocate` API 迁移 Elasticsearch 分片的方法 Elasticsearch 提供了 `_relocate` API,用于手动迁移特定分片到指定的节点上。在某些情况下,即使配置了 `cluster.routing.allocation.exclude._ip` 排除规则,已分配的分片不会自动迁移,这时需要使用 `_relocate` 命令进行干预。 要使用该 API,首先需要获取当前集群中分片的分配状态信息,可以通过 `_shard_stores` 或 `_cat/shards` API 获取相关数据。然后构造如下格式的请求: ```json POST _shard_stores { "index": "your_index_name" } ``` 获取到目标分片所在的节点和分片 ID 后,执行以下命令来触发分片迁移: ```json POST _cluster/reroute { "commands": [ { "move": { "index": "your_index_name", "shard": 0, "from_node": "node_with_shard", "to_node": "target_node" } } ] } ``` 此操作将强制将指定索引的某个分片从一个节点移动到另一个节点。需要注意的是,只有主节点才能执行此类操作,并且确保目标节点具备接收分片的能力(如磁盘空间、角色匹配等)[^1]。 ### 分片未迁移的可能原因及解决方案 #### 1. 节点角色限制 Elasticsearch 的节点可以配置不同的角色(如 `data`, `master`, `ingest` 等),如果目标节点不具备接收分片的角色,则迁移会失败。检查节点配置文件中的 `node.role` 设置,确保目标节点是数据节点(`data` 角色)。 #### 2. 数据层(Data Tier)限制 Elasticsearch 引入了数据层概念,例如 `data_hot`, `data_warm`, `data_cold` 等。如果索引配置指定了特定的数据层要求,而目标节点不属于该数据层,则无法接收分片。可以通过修改索引设置,调整 `index.data_layer` 参数以匹配目标节点的数据层属性。 #### 3. 分片处于不可移动状态 某些情况下,分片可能因副本同步、快照恢复等原因被标记为不可移动。此时可以通过 `_tasks` API 检查是否存在正在进行的任务,或通过 `_cluster/health` 查看集群整体健康状态,确认是否有阻止迁移的操作正在进行。 #### 4. 分配规则作用范围不正确 `cluster.routing.allocation.exclude._ip` 是集群级别的设置,仅影响新分配或再平衡的分片,对于已经分配的分片无效。因此,即使设置了排除规则,也需要手动调用 `_relocate` 或 `_reroute` 来迁移已有分片。 #### 5. 分片数量与节点数量不匹配 当主分片数量小于节点数量时,可能会导致部分节点无法接收到分片。Elasticsearch 默认使用 5 个主分片,若业务需求允许扩容,建议创建索引时适当增加主分片数量,以充分利用集群资源并提高负载均衡能力[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值