数据库文件的迁移

简介: 关于数据库中的文件迁移,需要考虑普通数据文件,redo日志文件(还需要考虑是否为current状态),undo表空间,临时表空间,system,sysaux表空间。
关于数据库中的文件迁移,需要考虑普通数据文件,redo日志文件(还需要考虑是否为current状态),undo表空间,临时表空间,system,sysaux表空间。
文件迁移可以参考下面的伪代码:

move_non_system_tablespace ,需要在open状态
                    {
                    alter tablespace xxxx offline;
                    cp datafiles
                    alter tablespace xxx rename sourcexxxxx   to targetxxxxx;
                    alter tablespace xxxxx online;
                    }

move_system_tablespace(system,sysaux,undo),需要在mount状态
                    {
                    cp datafiles
                    alter database rename  file  sourcexxxxx   to targetxxxxx;
                    alter database open;
                    }
move_redo_logs
                    {
                   1. for current/active logfiles, need to in mount state
                        cp logfiles
                        alter database rename  file  sourcexxxxx   to targetxxxxx;
                   2. for inactive/unused logfiles,can change online
                        cp logfiles
                        alter database rename  file  sourcexxxxx   to targetxxxxx;
                    }
move_temp_files
                    {
                    cp datafiles
                    alter database rename  file  sourcexxxxx   to targetxxxxx;
                    alter database tempfile xxxx online;
                    }

示例脚本如下:

##### normal tablespace  ####

alter tablespace TEST_DATA offline;
!cp '/oravl08/oradata/TESTDB/TEST_DATA_1.dbf' '/oravl01/oracle/TEST_DATA_1.dbf';
alter tablespace TEST_DATA rename datafile '/oravl08/oradata/TESTDB/TEST_DATA_1.dbf' to '/oravl01/oracle/TEST_DATA_1.dbf';
alter tablespace TEST_DATA online;

alter tablespace TEST_IX offline;
!cp '/oravl08/oradata/TESTDB/TEST_IX_1.dbf' '/oravl01/oracle/TEST_IX_1.dbf';
alter tablespace TEST_IX rename datafile '/oravl08/oradata/TESTDB/TEST_IX_1.dbf' to '/oravl01/oracle/TEST_IX_1.dbf';
alter tablespace TEST_IX online;


##### temp files ####
alter database tempfile '/oravl08/oradata/TESTDB/TEMP_1.dbf' offline;
!cp '/oravl08/oradata/TESTDB/TEMP_1.dbf' '/oravl01/oracle/TEMP_1.dbf'
alter database  rename file '/oravl08/oradata/TESTDB/TEMP_1.dbf' to '/oravl01/oracle/TEMP_1.dbf';
alter database tempfile '/oravl01/oracle/TEMP_1.dbf' online;

#### system,sysaux,undo ####
!cp '/oravl08/oradata/TESTDB/SYSTEM_1.dbf' '/oravl01/oracle/SYSTEM_1.dbf'
alter database  rename file '/oravl08/oradata/TESTDB/SYSTEM_1.dbf' to '/oravl01/oracle/SYSTEM_1.dbf';

!cp '/oravl08/oradata/TESTDB/SYSAUX_1.dbf' '/oravl01/oracle/SYSAUX_1.dbf'
alter database  rename file '/oravl08/oradata/TESTDB/SYSAUX_1.dbf' to '/oravl01/oracle/SYSAUX_1.dbf';


!cp '/oravl08/oradata/TESTDB/UNDOTBS_1.dbf' '/oravl01/oracle/UNDOTBS_1.dbf'
alter database  rename file '/oravl08/oradata/TESTDB/UNDOTBS_1.dbf' to '/oravl01/oracle/UNDOTBS_1.dbf';

#### logfiles ####
!cp '/oravl03/oradata/TESTDB/redo_g1_m1.dbf' '/oravl01/oracle/redo_g1_m1.dbf'
alter database  rename file '/oravl03/oradata/TESTDB/redo_g1_m1.dbf' to '/oravl01/oracle/redo_g1_m1.dbf';

!cp '/oravl03/oradata/TESTDB/redo_g1_m2.dbf' '/oravl01/oracle/redo_g1_m2.dbf'
alter database  rename file '/oravl03/oradata/TESTDB/redo_g1_m2.dbf' to '/oravl01/oracle/redo_g1_m2.dbf';


最后带给大家一些福利,关于文件的迁移,可以参考如下的脚本。
if [[ -d $1 ]]; then
    echo 'Directory has found :)'
else
    echo "Directory doesn't exists! :("
    exit
fi
#used for 11g
#select regexp_count(file_name,'/') from dba_data_files
#used for 10g,9i..
#select (length(file_name)-length(replace(file_name,'/',null)))/(length('/')) from dba_data_files
#get file_name
# select substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/'))) from dba_data_files;
sqlplus -s / as sysdba
set linesize 200
set pages 0
prompt ########## Scripts as below #######
select 'DB is now in '||status||' status'  from gv\$instance;
select
 'alter tablespace '||tablespace_name||' offline; '||chr(10)
||'!cp '||chr(39)||file_name||chr(39)||' ' ||chr(39)||'$1'||substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/')))||chr(39)||'; '||chr(10)
||'alter tablespace '||tablespace_name||' rename datafile '||chr(39)||file_name||chr(39)||' to '||chr(39)||'$1'||substr(file_name,instr(file_name,'/',1,regexp_count(file_name,'/')))||chr(39)||'; '||chr(10)
|| 'alter tablespace '||tablespace_name||' online; '
 from dba_data_files where tablespace_name not in ('SYSTEM','SYSAUX') and tablespace_name not like 'UNDO%';

prompt ##### temp files ####
select 'alter database tempfile '||chr(39)||name||chr(39)||' offline;'||chr(10)
||'!cp '||chr(39)||name||chr(39)||' ' ||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||'  '||chr(10) 
||'alter database  rename file '||chr(39)||name||chr(39)||' to '||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||'; '||chr(10)
|| 'alter database tempfile '||chr(39)||'$1'||substr(name,instr(name,'/',1,regexp_count(name,'/')))||chr(39)||' online; ' 
 from v\$tempfile;

prompt #### system,sysaux,undo ####
select
'!cp '||chr(39)||f.name||chr(39)||' ' ||chr(39)||'$1'||substr(f.name,instr(f.name,'/',1,regexp_count(f.name,'/')))||chr(39)||' '||chr(10)
||'alter database  rename file '||chr(39)||f.name||chr(39)||' to '||chr(39)||'$1'||substr(f.name,instr(f.name,'/',1,regexp_count(f.name,'/')))||chr(39)||'; '
 from v\$datafile f,v\$tablespace t where t.ts#=f.ts# and (t.name  in ('SYSTEM','SYSAUX') or t.name like 'UNDO%'); 

prompt #### logfiles ####
select
'!cp '||chr(39)||member||chr(39)||' ' ||chr(39)||'$1'||substr(member ,instr(member ,'/',1,regexp_count(member ,'/')))||chr(39)||'  '||chr(10) 
||'alter database  rename file '||chr(39)||member ||chr(39)||' to '||chr(39)||'$1'||substr(member ,instr(member ,'/',1,regexp_count(member ,'/')))||chr(39)||'; ' 
 from v\$logfile f,v\$log l where f.group#=l.group# and l.status!='CURRENT';

EOF
exit


阅读(8366) | 评论(0) | 转发(3) |
目录
相关文章
|
24天前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之文件存在但是数据库提示文件不存在如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
30天前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
17 0
|
3月前
|
关系型数据库 MySQL 数据库连接
gorm连接mysql数据库以及建表和自动迁移
gorm连接mysql数据库以及建表和自动迁移
35 0
|
4月前
|
SQL 数据库 Python
记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题
Flask-Migrate迁移数据库失败的两个Bug 1、找不到数据库:Unknown database ‘***’ 若还没有创建数据库,该迁移工具不会自动创建。你可以使用SQL命令手动创建一个数据库:
38 0
|
4月前
|
关系型数据库 数据库 RDS
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
30 1
|
2天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
8 1
|
29天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
30天前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
108 1
|
2月前
|
存储 关系型数据库 数据库
在进行RDS(Amazon Relational Database Service,亚马逊关系数据库服务)迁移时,兼容性审查
在进行RDS(Amazon Relational Database Service,亚马逊关系数据库服务)迁移时,兼容性审查
20 1
|
3月前
|
SQL 存储 Oracle
oracle如何定期备份数据库sql文件
【1月更文挑战第7天】oracle如何定期备份数据库sql文件
58 8