Oracle_表空间(数据文件)迁移
- 格式:docx
- 大小:14.71 KB
- 文档页数:2
1 oracle服务器由( oracle实例)和oracle数据库组成;2 下面哪个不是必需的后台进程(D)A SMONB LGWRC CKPTD ARCO3 用户进行增、删、改commit后,该记录存储的位置(备注:没有switch logfile)(A)A 联机日志文档B 归档日志文件C 数据文件D 联机日志文件和归档日志文件4 当oracle创建一个服务器进程的同时要为该服务器进程分配一个内存区,该内存区称为(程序全局区)5 简单阐述以下三种文件里面包含的内容?(控制文件、重做日志文件、数据文件)。
控制文件:包含维护和校验数据库一致性所需的信息重做日志文件:包含当系统崩溃后进行恢复所需记录的变化信息数据文件:包含数据库中真正的数据(以上答案仅供参考)6 以下说法错误的是(C)A PGA是一个私有的内存区,不能共享,且只属于一个进程B oracle实例是一种访问数据库的机制,它由内存结构和一些后台进程组成C oracle数据库物理存储结构是由控制文件,归档日志文件,数据文件三部分组成D 数据未被写到数据文件中,这些数据缓冲区被标为脏缓冲区7 获取参数SGA_MAX_SIZE需要利用的数据字典是( v$parameter )8 如果没有正常退出Oracle得情况下重新启动了所用的PC,由(B)负责它的清理工作A SMONB PMONC DBWRD LGWR9以下什么文件能确保Oracle系统在遇到数据文件丢失或损坏后可以完全恢复数据库中的数据?(C)A 联机日志文件B 数据文件C 归档日志文件D 控制文件10以下show parameter ( db_block_size)可以查看数据库块大小.11以下哪条命令可以显示emp表的表结构(D)A show empB select * from emp 查询表内容C show parameter v$empD desc emp显示表结构12使用任何方法创建一个数据库,Oracle都会自动创建两个超级用户system和(sys),它们也被称为数据库管理员用户13 SQL*Plus作为sysdba连接数据库的命令是:(conn / as sysdba)14请简单描述OEM(Oracle企业管理器)是什么OEM是一个功能强大而且操作简单的图形化数据库管理员工具。
Oracle数据库迁移1.背景:据项目实施人员反映,部署系统的过程中,有一个最大的问题,那就是平台数据库的迁移。
经常会遇到表空间导出导入失败,或是导入过程中数据表丢失或是数据表虽然能导入,但表字段丢失等现象。
针对这种情况,我仔细分析了一下:主要原因出在目前的exp/imp 这种数据导入导出工具存在比较大的缺陷,这种缺陷将在后面提到。
相比目前这种方式,我这里提供一种比较方便稳定的数据库迁移方案。
以下提到的方案,我也多次尝试验证了,并且还很实在。
2.数据库迁移方案:实用环境:Oracle10g 或是以上版本。
原理:利用Oracle10g提供的数据泵,快速加载以及卸载数据。
优点:导入导出数据库快速比较快,且完整,性能稳定。
缺点:这种方式只能在装有Oracle服务器端的软件的机器上应用。
完整方案:这里模拟二个场景:场景1:实现不同库下不同用户之间表空间的迁移。
假设通过Oracle数据泵,A用户UserA 将表空间TA 提取到A.dmp,而后B用户UserB将A.dmp 装载到表空间TB。
第一步:首先在源库(A)上建一个目录,这个目录用于转储导入导出过程中的数据文件及日志文件。
create directory dumpdir as 'E:\dump';注:dumpdir为目录名,它是数据库中的目录对象名,“c:\dump”:为对应的磁盘物理路径。
第二步:给用户授予目录的读写权限。
(因为要写日志,这一步是必须的)grant read, write on directory dumpdir to UserA;第三步:导出用户UserA下的所有对象:expdp UserA/Password@orcl schemas=UserA dumpfile=expa.dmp DIRECTORY= dumpdir 注:1、orcl为配置的用于从客户端连接Oracle的连接名。
2、dumpfile中不能再包含路径以上三步为数据导出过程,下面几步为数据导入过程。
循序渐进讲解Oracle9i数据库的迁移过程需求:把原系统Oracle 9205数据库迁移到一台新的服务器和阵列上,原系统有250GB的数据量,需要停止原来系统的业务,做冷备份和恢复。
解决方法如下:◆1.在新的服务器和阵列上装好一个oracle 9206数据库;◆2.停止原系统oracle 9205;◆3.把原系统的数据冷拷贝到新的服务器上,然后按照以下步骤来进行恢复:(1)、获取数据库相关信息首先要查看一下数据库的文件内容:select * from v$datafile;select * from v$controlfileselect * from v$logfile;数据文件:G:\ORADATA\WEBOA\SYSTEM01.DBFG:\ORADATA\WEBOA\UNDOTBS01.DBFG:\ORADATA\WEBOA\CWMLITE01.DBFG:\ORADATA\WEBOA\DRSYS01.DBFG:\ORADATA\WEBOA\EXAMPLE01.DBFG:\ORADATA\WEBOA\INDX01.DBFG:\ORADATA\WEBOA\ODM01.DBFG:\ORADATA\WEBOA\TOOLS01.DBFG:\ORADATA\WEBOA\USERS01.DBFG:\ORADATA\WEBOA\XDB01.DBF控制文件:G:\ORADATA\WEBOA\CONTROL01.CTLG:\ORADATA\WEBOA\CONTROL02.CTLG:\ORADATA\WEBOA\CONTROL03.CTL重做日志文件:G:\ORADATA\WEBOA\REDO03.LOGG:\ORADATA\WEBOA\REDO02.LOGG:\ORADATA\WEBOA\REDO01.LOG(2)、移动应用数据文件shutdown immediate关闭数据库,拷贝数据文件到另外一个目录下。
Oracle⽤分区表分区交换做历史数据迁移⼀。
说明:OLTP库中有些表数据量⼤,且每⽉有持续的⼤量数据添加。
因为历史数据在此库中不再做訪问,⽽是在另1个OLAP库中做分析。
所以会对历史数据迁移⾄OLAP库中。
对这样的历史数据迁移的操作。
较好的办法是该表採⽤分区表。
按时间分区后,能够对分区进⾏迁移。
通过分区交换和表空间传输会⾮常easy完毕。
并且性能上影响⾮常⼩。
关于分区表很多其它内容: /tanqingru/article/category/1397435关于表空间传很多其它内容: /tanqingru/article/category/1138527⼆。
实例:整个过程是在OLTP库做分区交换。
然后通过表空间传输迁移⾄OLAP库。
最后再做⼀次分区交换就可以。
1.创造须要的环境。
OLTP库环境准备:SQL> conn /as sysdbaConnected.SQL> select * from V$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionPL/SQL Release 11.2.0.3.0 - ProductionCORE 11.2.0.3.0 ProductionTNS for Linux: Version 11.2.0.3.0 - ProductionNLSRTL Version 11.2.0.3.0 - ProductionSQL> show parameter db_create_file_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_create_file_dest string /data01/qingcreate tablespace tan_2013_9 datafile size 5m autoextend on;create tablespace tan_2013_10 datafile size 5m autoextend on;create tablespace tan_2013_11 datafile size 5m autoextend on;create tablespace tan_2013_12 datafile size 5m autoextend on;create tablespace tan_2014_1 datafile size 5m autoextend on;create tablespace tan_2014_2 datafile size 5m autoextend on;create tablespace tan_2014_3 datafile size 5m autoextend on;create tablespace tan_2014_4 datafile size 5m autoextend on;create tablespace tan_2014_5 datafile size 5m autoextend on;create tablespace tan_2014_6 datafile size 5m autoextend on;create tablespace tan_2014_7 datafile size 5m autoextend on;create tablespace tan_2014_8 datafile size 5m autoextend on;conn tan/tanSQL> create table tan(t_id number(10),t_name varchar2(100),t_date date )partition by range(t_date)(partition tan_2013_9 values less than(to_date('2013-10-01','yyyy-mm-dd')) tablespace tan_2013_9,partition tan_2013_10 values less than(to_date('2013-11-01','yyyy-mm-dd')) tablespace tan_2013_10,partition tan_2013_11 values less than(to_date('2013-12-01','yyyy-mm-dd')) tablespace tan_2013_11, partition tan_2013_12 values less than(to_date('2014-01-01','yyyy-mm-dd')) tablespace tan_2013_12, partition tan_2014_1 values less than(to_date('2014-02-01','yyyy-mm-dd')) tablespace tan_2014_1, partition tan_2014_2 values less than(to_date('2014-03-01','yyyy-mm-dd')) tablespace tan_2014_2, partition tan_2014_3 values less than(to_date('2014-04-01','yyyy-mm-dd')) tablespace tan_2014_3, partition tan_2014_4 values less than(to_date('2014-05-01','yyyy-mm-dd')) tablespace tan_2014_4, partition tan_2014_5 values less than(to_date('2014-06-01','yyyy-mm-dd')) tablespace tan_2014_5, partition tan_2014_6 values less than(to_date('2014-07-01','yyyy-mm-dd')) tablespace tan_2014_6, partition tan_2014_7 values less than(to_date('2014-08-01','yyyy-mm-dd')) tablespace tan_2014_7, partition tan_2014_8 values less than(to_date('2014-09-01','yyyy-mm-dd')) tablespace tan_2014_8 );create index ind_tan on tan(t_date) local(partition ind_tan_2013_9 tablespace tan_2013_9,partition ind_tan_2013_10 tablespace tan_2013_10,partition ind_tan_2013_11 tablespace tan_2013_11,partition ind_tan_2013_12 tablespace tan_2013_12,partition ind_tan_2014_1 tablespace tan_2014_1,partition ind_tan_2014_2 tablespace tan_2014_2,partition ind_tan_2014_3 tablespace tan_2014_3,partition ind_tan_2014_4 tablespace tan_2014_4,partition ind_tan_2014_5 tablespace tan_2014_5,partition ind_tan_2014_6 tablespace tan_2014_6,partition ind_tan_2014_7 tablespace tan_2014_7,partition ind_tan_2014_8 tablespace tan_2014_8);beginfor i in 1.. 10000 loopif( mod(i,12)+1 <=8) theninsert into tan values(i,'tan'||i,to_date('2014-'||(mod(i,12)+1)||'-01','yyyy-mm-dd'));elseinsert into tan values(i,'tan'||i,to_date('2013-'||(mod(i,12)+1)||'-01','yyyy-mm-dd'));end if;end loop;commit;end;/SQL> select count(*) from tan partition(tan_2013_12) ;COUNT(*)----------833SQL> select count(*) from tan partition(tan_2013_9) ;COUNT(*)----------833SQL> select count(*) from tan partition(tan_2014_8) ;COUNT(*)----------833SQL> select count(*) from tan partition(tan_2014_1) ;COUNT(*)----------833SQL> select partition_name,tablespace_name from dba_segmentswhere segment_name in ('TAN','IND_TAN');PARTITION_NAME TABLESPACE_NAME------------------------------ ------------------------------TAN_2014_8 TAN_2014_8TAN_2014_7 TAN_2014_7TAN_2014_6 TAN_2014_6TAN_2014_5 TAN_2014_5TAN_2014_4 TAN_2014_4TAN_2014_3 TAN_2014_3TAN_2014_2 TAN_2014_2TAN_2014_1 TAN_2014_1TAN_2013_9 TAN_2013_9TAN_2013_12 TAN_2013_12TAN_2013_11 TAN_2013_11TAN_2013_10 TAN_2013_10IND_TAN_2014_8 TAN_2014_8IND_TAN_2014_7 TAN_2014_7IND_TAN_2014_6 TAN_2014_6IND_TAN_2014_5 TAN_2014_5IND_TAN_2014_4 TAN_2014_4IND_TAN_2014_3 TAN_2014_3IND_TAN_2014_2 TAN_2014_2IND_TAN_2014_1 TAN_2014_1IND_TAN_2013_9 TAN_2013_9IND_TAN_2013_12 TAN_2013_12IND_TAN_2013_11 TAN_2013_11IND_TAN_2013_10 TAN_2013_1024 rows selected.OLAP库环境准备<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">create tablespace tan_2013_7 datafile size 5m autoextend on;</span> create tablespace tan_2013_8 datafile size 5m autoextend on;create table tan(t_id number(10),t_name varchar2(100),t_date date )partition by range(t_date)(partition tan_2013_7 values less than(to_date('2013-08-01','yyyy-mm-dd')) tablespace tan_2013_7,partition tan_2013_8 values less than(to_date('2013-09-01','yyyy-mm-dd')) tablespace tan_2013_8);create index ind_tan on tan(t_date) local(partition ind_tan_2013_7 tablespace tan_2013_7,partition ind_tan_2013_8 tablespace tan_2013_8);beginfor i in 1.. 10000 loopinsert into tan values(i,'tan'||i,to_date('2013-'||(mod(i,2)+7)||'-01','yyyy-mm-dd'));end loop;commit;end;/SQL> select count(*) from tan partition(tan_2013_8);COUNT(*)----------5000SQL> select count(*) from tan partition(tan_2013_7);COUNT(*)----------50002.分区交换如今要做的事是迁移2013年9⽉份数据。
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型:1.temporary: 临时表空间,用于临时数据的存放;create temporary tablespace "sample"......2.undo : 还原表空间. 用于存入重做日志文件.create undo tablespace "sample"......3.用户表空间: 最重要,也是用于存放用户数据表空间create tablespace "sample"......--注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式:create tablespace 表空间名datafile '文件标识符' 存储参数[...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数)]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k,如不指定,区尺寸默认为64kcreate tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为"sample" 的表空间.对表空间的命名,遵守oracle 的命名规范就可了. 第二: logging 有nologging 和logging 两个选项,nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m, 'd:\oracle\oradata\ora92\ dd.ora' size 5m但是每个文件都需要指明大小.单位以指定的单位为准如5m 或500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争. 指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
--临时表空间满时的处理方法1.增加临时文件: 不建议设置为自增长导致把磁盘给撑满SQL> ALTER TABLESPACE TEMP ADD TEMPFILE'/oracle/oradata/itpuxdb/temp02.dbf'SIZEE 10M AUTOEXTEND OFF;2.修改临时文件: 可以将原来的数据文件改大一点如:SQL> ALTER DATABASE TEMPFILE'/oracle/oradata/itpuxdb/temp02.dbf'RESIZE100M;3.收缩Shrinking临时表空间SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP20M; 收缩表空间SQL> ALTER TABLESPACE temp SHRINK TEMPFILE'/oracle/oradata/itpuxdb/temp02.dbf'; 收缩文件数据库重启后,会自动释放temp表空间默认临时表空间TEMP的过大的重建流程如果删除不了查询哪些sql在使用临时表空间,开启另外一个session查询SQL> selectername,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))as space,tablespace,segtype,sql_text from v$sort_usage su,v$parameter p,v$sessionse,v$sql s where ='db_block_size'and su.session_addr=se.saddr ands.hash_value=su.sqlhash and s.address=su.sqladdr order by ername,se.sid;如果列出存在的,则通过以下语句杀掉这些sid与serial 【注意:1是系统进程不能乱杀】SQL> alter system kill session'187,12619';SYSTEM与SYSAUX表空间满了怎么办?1.添加表空间2.把system或者sysaux表空间的信息迁移到其它表空间。
Oracle数据库管理员(DBA)手册涵盖了广泛的主题,包括数据库安装、配置、性能调优、备份和恢复、安全性等方面。
以下是一个简要的Oracle数据库管理员手册的大纲,其中包含了一些主要的主题:1. 数据库基础知识和架构:- Oracle数据库的体系结构-数据库实例和数据库-表空间和数据文件2. 数据库安装和配置:- Oracle数据库软件的安装-创建数据库-配置监听器-网络配置3. 数据库对象管理:-表和索引的创建、修改和删除-视图、存储过程和触发器的管理-序列的创建和管理-同义词的使用4. 用户和权限管理:-用户账号的创建和管理-角色和权限管理-访问控制和安全性5. 性能调优:- SQL调优技术-索引优化-表分区和分表-优化查询计划6. 备份和恢复:-数据库备份策略-使用RMAN进行备份和恢复-数据库点恢复和时间点恢复7. 监控和诊断:-使用AWR和ADDM进行性能分析-查询V$视图和动态性能视图-警告和错误日志的管理8. 高可用性和容灾:-数据库复制和数据保护- RAC(Real Application Clusters)配置-数据库故障转移和恢复9. 安全性:-用户身份验证和访问控制-安全审计和监视-数据加密和解密10. 数据库升级和迁移:- Oracle版本升级-数据库迁移和导入/导出11. 常规维护任务:-统计信息收集和重建索引-表空间管理-定期任务和计划任务12. 实用工具:- SQL*Plus和SQLcl- Oracle Enterprise Manager(OEM)-数据库配置助手(DBCA)和其他实用工具13. 文档和资源:- Oracle文档和在线资源-社区和论坛这个大纲只是一个简单的概述,实际的Oracle数据库管理员手册可能更为详细,根据组织的需求和数据库的规模可能会有所不同。
要深入了解每个主题,建议参考Oracle官方文档和相应版本的手册。
Oracle的文档通常提供了详细的指导和最佳实践。
Oracle释放表空间最佳实践简介在Oracle数据库中,表空间是用于存储数据的逻辑结构。
当表空间的使用率过高或者需要释放空间时,我们需要采取一些最佳实践来进行操作。
本文将介绍一些Oracle中释放表空间的最佳实践方法。
1. 监控表空间使用率在释放表空间之前,我们首先需要监控和了解当前表空间的使用情况。
可以通过以下方式进行监控: - 使用DBA_FREE_SPACE视图查看每个表空间中的可用空间情况。
- 使用DBA_SEGMENTS视图查看每个段(包括表、索引等)在各个表空间中所占用的空间。
- 使用DBA_TABLESPACES视图查看每个表空间的总容量、已使用容量等信息。
通过以上监控手段,我们可以了解到哪些表空间使用率较高,从而有针对性地进行释放操作。
2. 清理无效对象Oracle数据库中可能存在一些无效对象(如已被删除但仍占据着存储空间的对象),这些对象会占用宝贵的存储资源。
我们可以通过以下方法清理这些无效对象:- 使用DROP TABLE语句删除不再需要的表。
- 使用DROP INDEX语句删除不再需要的索引。
- 使用PURGE RECYCLEBIN语句清空回收站中的对象。
清理无效对象可以释放表空间的存储空间,并提高数据库性能。
3. 压缩表和分区在Oracle数据库中,我们可以使用表和分区压缩来减少数据占用的存储空间。
压缩可以通过以下方式实现: - 使用ALTER TABLE ... MOVE语句对表进行重建,从而实现压缩。
- 使用ALTER TABLE ... SHRINK SPACE语句对表进行收缩,从而减少存储空间占用。
压缩表和分区可以大幅度减少存储空间的使用,并提高查询性能。
4. 数据归档和分离对于一些历史数据或者不经常访问的数据,我们可以考虑将其归档或者分离到其他存储介质中,以释放表空间。
具体方法包括: - 使用Oracle自带的归档工具将历史数据归档到磁带等介质中。
- 将不经常访问的数据迁移到其他数据库或者文件系统中。
如何从Oracle迁移到MySQL数据库从Oracle迁移到MySQL数据库简介:Oracle和MySQL都是目前广泛使用的关系型数据库管理系统(RDBMS)。
尽管两者在一些方面有所不同,但随着MySQL的快速发展和成熟,许多企业开始考虑从Oracle迁移到MySQL。
本文将探讨从Oracle迁移到MySQL的一些关键问题和最佳实践。
一、数据兼容性分析:在迁移过程中,首要任务是分析Oracle数据库和MySQL之间的数据兼容性。
由于Oracle和MySQL使用不同的SQL语法和数据类型,可能存在某些表、字段或查询存在差异的情况。
因此,在迁移之前,必须仔细检查数据库结构和数据,以确保在MySQL中正确创建和导入数据。
Oracle和MySQL之间的差异通常涉及以下方面:1. 数据类型:Oracle和MySQL支持不同的数据类型。
在转换时,需要注意数据类型的映射和兼容性。
2. 约束和索引:Oracle和MySQL的约束和索引有一些差异,需要逐个检查并调整。
3. 存储过程和触发器:Oracle和MySQL的存储过程和触发器语法也有所不同,需要做相应的调整。
二、数据迁移方法:1. 导出和导入数据:一种常见的迁移方法是使用Oracle的导出工具(如expdp)将数据导出为可移植的数据文件(例如,使用XML格式)。
然后使用MySQL的导入工具(如mysqlimport)将数据导入到MySQL数据库中。
这种方法简单直接,但可能会导致一些数据类型的兼容性问题。
2. 数据库连接工具:如果Oracle和MySQL之间的网络连接可用,可以使用数据迁移工具,如Oracle的Gateway或MySQL的Federated引擎,直接在两个数据库之间进行数据交换。
这种方法可以实现实时数据同步,并且具有较低的延迟。
3. 自定义脚本:对于一些复杂的数据迁移任务,可能需要编写自定义的脚本来处理数据转换和迁移过程。
这需要深入了解Oracle和MySQL的SQL语法和函数,以及相关的数据处理操作。
Oracle数据库迁移几种方式我们常需要对数据进行迁移,迁移到更加高级的主机上、迁移到远程的机房上、迁移到不同的平台下……一、exp/imp:这也算是最常用最简单的方法了,一般是基于应用的owner级做导出导入。
操作方法为:在新库建立好owner和表空间,停老库的应用,在老库做exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000,传dmp文件到新库,在新库做imp user/pwd fromuser=XXX touser=XXX file=exp_xxx.dmp log=imp_xxx.log ignore=y.优缺点:优点是可以跨平台使用;缺点是停机时间长,停机时间为从exp到网络传输到新库,再加上imp的时间。
二、存储迁移:这种情况下,数据文件、控制文件、日志文件、spfile都在存储上(一般情况下是裸设备),我们可以直接把存储挂到新机器上,然后在新机器上启动数据库。
操作方法:将老库的pfile(因为里面有指向裸设备的spfile链接),tnsnames.ora,listener.ora,密码文件传到新库的对应位置。
将存储切至新机,或者用文件拷贝或dd的方式复制数据文件,启动数据库。
优缺点:优点是该迁移方式非常简单,主要的工作是主机工程师的工作,dba只需配合即可,停机时间为当库、切存储、起库的时间。
缺点是要求新老库都是同一平台,是相同的数据库版本。
三、利用data guard迁移:用dg我们不仅可以用来做容灾,物理的dg我们还可以作为迁移的方式。
操作方法:可见/study-note/dg-created-by-rman/或者/study-note/create-dg-by-rman-one-datafile-by-one -datafile/或者其他相关网文。
注意switch over之后,可以将dg拆掉,去掉log_archive_dest_2、FAL_SERVER、FAL_CLIENT、standby_file_management 参数。
--表空间(数据文件)的迁移
--【在线的操作方法-移动表空间的数据文件的路径(更改表空间数据文件的路径)】
1.首先确定数据文件的状态要为OFFLINE
SQL> select tablespace_name,status,contents from dba_tablespaces;
2.将该表空间修改为OFFLINE 【以users表空间为例】
SQL> alter tablespace USERS offline;
SQL> select tablespace_name,status,contents from dba_tablespaces; --查看表空间状态确定修改成功
3.移动数据文件到新的路径
[oracle@xxx ~]$ host copy /oracle/oradata/itpuxdb/itpux01.dbf
/oracle/oradata/itpuxdb/itpux02.dbf;
4.重新命名该表空间的新路径和名称(告诉数据库)
SQL> alter tablespace users rename datafile'/oracle/oradata/itpuxdb/itpux01.dbf'to '/oracle/oradata/itpuxdb/itpux001.dbf';
5.修改表空间的状态为ONLINE状态
SQL> alter tablespace users online;
-------------------------------------------------------------------------------------
--【离线的操作方法-移动数据文件-到其它目录】
1.关闭数据库启动到模式下
SQL> shutdown immediate;
SQL> startup mount;
2. 移动数据文件
[oracle@xxx ~]$ host copy /oracle/oradata/itpuxdb/itpux01.dbf
/oracle/oradata/itpuxdb/itpux02.dbf
3. 重新命名(这里写更改数据库因为数据库没有起来就没有表空间)
SQL> alter database rename file'/oracle/oradata/itpuxdb/itpux01.dbf'
to'/oracle/oradata/itpuxdb/itpux001.dbf'
4. 打开数据库
SQL> alter database open
5. 检查状态
SQL> select * from dba_data_files where tablespace_name='ITPUX01';
----------------------------------------------------------------------------------
1.copy数据文件到其它目录【因为根目录撑爆,在数据库挂掉的情况下】
2.启动startup mount;
3.在mount模式下执行这两条命令
alter database rename file'/oracle/app/oracle/oradata/ywxt1/undotbs01.dbf'to
'/oradata/undotbs01.dbf';
alter database rename file'/oracle/app/oracle/oradata/ywxt1/temp01.dbf'to
'/oradata/temp01.dbf';
4.启动数据库
startup
---------------------------------------------------------------------------------------把表和索引迁移其它的表空间
1.查询该对象存放在哪个表空间
select segment_name,tablespace_name,extents,blocks from dba_segments where
owner='SCUSER'
2.查询该对象是索引,还是表
select object_id,object_name,object_type,status,created from dba_objects where
owner='SCUSER'
3.查询索引或者表存放在哪个表空间
select index_name,table_name,tablespace_name,status from dba_indexes where
owner='SCUSER'
4.移动表到另一个表空间
alter table scuser.table01 move tablespace scdata02
5.查询该表是否移动到该表空间
select segment_name,tablespace_name,extents,blocks from dba_segments where
owner='SCUSER'
6.检查表是否有效(状态为 VALID 是有效)
select object_id,object_name,object_type,status,created from dba_objects where
owner='SCUSER'
7.重建索引并且将索引移动到另一个表空间
alter index scuser.idx_table01_id rebuild tablespace scdata02
8.查询索引对应的表空间
select index_name,table_name,tablespace_name,status from dba_indexes where
owner='SCUSER'
9.如果表空间里面表有大字段?
alter table USER.RESUME move lob(INTRO) store as(tablespace USER);。