数据迁移计划
原因:
oracle数据库数据文件将磁盘空间占满导致数据无法写入,如果删除历史数据,表空间不会释放占用物理空间不会释放,所以磁盘依旧是满的,现在需要腾出部分空间,然后挂在新的盘符为数据存储。
需要解决的问题
删除部分历史数据后表空间不会释放
迁移计划
一、备份
二、数据文件迁移
所有的命令执行要在 sqlplus下执行
1. 进入sqlplus
//进入sqlplus oracle命令提示空间
sqlplus /nologs
conn /as sysdba
2. 关闭数据库
//关闭数据库
shutdown immediate
3. 移动数据文件位置
比如
将 D:\app\Administrator\admin\orcl\JCPT_CA.DBF
移动到
C:\Users\Administrator\Oracle\JCPT_CA.DBF
4. 启动数据库到 mount状态
//数据库例程开启
startup mount
5. 执行数据文件位置更改
//更改数据文件位置
alter database rename file 'D:\app\Administrator\admin\orcl\JCPT_CA.DBF' to 'C:\Users\Administrator\Oracle\JCPT_CA.DBF';
6. 启动数据库
alter database open;
7. 重启验证
//关闭数据库
shutdown immediate
//启动数据库
startup
三、删除历史数据,释放空间(如果执行了第二步这步可不做)
此步骤主要是为了删除数据后 释放表空间占用的物理空间
1. 删除分区表中无用的历史数据
//查询所有分区表数据数据文件
//按照时间删除部分无用表分区 -- update global indexes 如果数据量大 可能会耗时
alter table ‘表名’ drop partition ‘分区’ -- UPDATE GLOBAL INDEXES;
//
2. 查询表空间中每个数据文件的实际使用空间
select d.bytes total ,s.bytes free,s.tablespace_name tablespace_,
d.file_name file_name,d.file_id file_id
from DBA_FREE_SPACE s ,dba_data_files d
where d.FILE_ID = s.file_id and d.tablespace_name = '表空间名称'
3. 重设每个数据文件的空间大小为实际使用大小
//根据上一步得到的使用空间 在以下位置释放表空间略大于实际使用空间即可
alter database datafile '~/jcpt.dbf' resize 500m;
4. 关闭数据文件的自动扩展
-- 扩建数据文件
alter tablespace JCPT add datafile 'D:/oracle/product/10.2.0/oradata/orcl/jcpt01.dbf' size 30048m
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
-- 关闭表空间自动扩展
alter database datafile '/u01/app/oracle/oradata/fzyz/TS_JOB12_IDX_001.DBF' autoextend off;
5. 扩展数据文件到新的盘符/位置
alter tablespace JCPT add datafile 'D:/oracle/product/10.2.0/oradata/orcl/jcpt01.dbf' size 30048m;
并把jcpt01文件按照3.3.2步骤设置成自动扩展大小。
或者一气呵成:
alter tablespace JCPT add datafile 'D:/oracle/product/10.2.0/oradata/orcl/jcpt01.dbf' size 30048m AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
这个步骤可能比较耗时,耐心等待
多少不凡,只因不甘
原创文章