名站网址导航为大家提供关于数据库教程相关的教程网站知识。
oracle 网站数据库数据迁移解决方案
去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享。, 首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定要写清楚,然后进行完整的测试。咱们在迁移时,有的系统测试了四五次,通过测试来完善方案和流程。, 针对物理迁移,也即通过RMAN备份来进行还原并应用归档的相关方式(这里不讨论通过dd相关方式进行的冷迁移),虽然注意的是要将网站数据库设为force logging的相关方式,在用RMAN做全备之前,一定要执行:, 否则可能会产生坏块。, 对于逻辑迁移,在job_processes设置为>0的数值之前,注意job的下次执行时间和job所属用户。比如job的定义在之前已经导入,但是在迁移之时,job已经运行过,那么迁移完成之后,job, 在迁移之前,应该禁止对系统进行结构上的修改和发布,比如表结构,索引,存储过程包等。, 假如如果是用exp/imp导入的对象,包括存储过程等,应该检查对象是否与原生产库一致,比如由于dblink的原因,imp之后,存储过程不能创建,导致有部分存储过程丢失,尽管这些存储过程可能没有被使用。, 下面是一些加快迁移速度的技巧:, 通过dblink,使用append insert的相关方式,同时利用并行,这种相关方式比exp/imp更快, 对于有LONG类型的列,insert..select的相关方式显然是不行的,可以通过exp/imp的相关方式,但是这种相关方式速度非常慢,其原因在于imp时一行一行地插入表。有另外一种相关方式,即sqlplus的, 不过,sqlpus的copy开始执行命令不支持有timestamp和lob列类型的表。假如如果有timestamp类型的表,可以通过在exp时,加上rowid的条件,将一个表分成多个部分同时操作办法,对于有lob, 将表分成几部分同时操作办法,不仅仅可以利用rowid,也可以利用表上的列,比如说,表上有一个created_date的列,并且保证是递增插入数据,那么这种情况下,也可以使用这个字段将表分成不同的范围同, 当然对于有lob列的表,可以按上述相关方式,拆成多个insert相关方式同时插入,不需要exp/imp。, ·对于特别大的分区表,虽然使用并行可以提高速度,但是受限于单个进程(不能跨DB LINK进行并行事务,只能并行查询,也即insert..select只能是SELECT部分才能进行并行)的处理能力,, ·有朋友可能会问,为什么不并行直接插入分区表,当然假如如果是非direct path(append)相关方式,则是没问题的,但是这种相关方式插入的性能较低。而direct path的相关方式,会在表上持有mode, ·迁移时,将数据分成两部分,一部分是历史表,第二部分是动态变化的表,在迁移之前,先导入历史表,并在历史表上建好索引,这无疑会大大减少迁移时业务系统中断时间。, ·迁移之前,考虑清理掉垃圾数据。, ·迁移时,应保证表上没有任何索引,约束(NOT NULL除外)和触发器,数据导入完成后,再建索引。建索引时同样,同时使用多个进程跑脚本。索引创建无成后,应去掉索引的PARALLEL属性, ·在创建约束时,应按先创建ChECK约束,主键,唯一键,再创建外键约束的顺序。约束状态为 ENABLE NOVALIDATE,这将大大减少约束创建时间。而在迁移完成后,再考虑设回为ENABLE V, ·通过使用dbms_stats.export_schame_stats和dbms_stats.import_schame_stats导入原库上的统计信息,而不用重新收集统计使用。, 朋友们可以看到,以上均是针对9i的,实际上在10g甚至11g环境下,也仍然很多借鉴意义。当然这些技巧不仅仅用于完整的网站数据库迁移,也可以应用到将个别表复制到其他网站数据库上。,
一不小心听说了oracle 网站数据库快照,这个词我当初一听就楞了,不知道这个是什么玩意,然后花了点时间研究了下,以下是我通过网络学习总结的
快照主要是用于分布式网站数据库,咱们有网站数据库A,A中有个表a,咱们在网站数据库B中要使用网站数据库A中a表的数据,这时候咱们就可以在网站数据库B中创建网站数据库A的快照,这样可以提高咱们的效率。
我理解快照就是对表的复制,定时的将a表复制到b表(包括数据)
注意:用快照创建的表是只读的
创建快照的具体相关方法:
1、先需要在A网站数据库中建立表a的快照日志
只有先建立表a的快照日志,才能在快照中执行快速刷新
Create snapshot log on a;
2、在网站数据库B下建立到网站数据库A用户的网站数据库链link
a)只有建立了到A网站数据库(用户)的网站数据库链后才能从A网站数据库(用户)下的表a中获取数据
Create database link link_test
Connect to A网站数据库用户名(username)identified by A网站数据库密码(password) using ‘网站数据库名(database)'
此图为用pl/sql建立link的视图
3、在网站数据库B下建立a表的快照
Create snapshot t_a——>将来在数据B中对于a表快照显示的表名
REFRESh COMPLETE START WITh SYSDATE 1/24*60*60 NEXT SYSDATE 1/24*60
as select * from a@link_test
SYSDATE 1/24*60*60:表示设定oracle 自动在1秒钟执行刷新,NEXT SYSDATE 1/24*60
表示以后每个1分钟自动刷新一次
说明: REFRESh是刷新具体相关方法
刷新相关方式有:COMPLETE(完全刷新)和FAST(快速刷新)两种,
而START WITh是说明开始执行的时间。
Next是下次执行的时间
而AS以后是构成快照的查询具体相关方法。
刷新具体相关方法:
快照的刷新有两种相关方式:快速刷新和完全刷新。快速刷新需要快照的主表先有快照日志存在;完全刷新时oracle执行快照查询,将结果放入快照。快速刷新比完全刷新快,因为快速刷新将主网站数据库的数据经网络发送到快照的数据少,仅需传送主表中修改过的数据,而完全刷新要传送快照查询的全部结果。
4、修改快照
Alter snapshot t_a refresh fast
Start with sysdate 1/2880 next sysdate 1
此sql数据库语句意思:设定oracle 自动在30秒(30/24*60*60)后进行第一次快速刷新,以后,每隔1天快速刷新一次
5、查看快照最后刷新的日期
SELECT NAME,LAST_REFRESh
FROM ALL_SNAPShOT_REFRESh_TIMES
6、手动刷新快照在开始执行命令界面执行:
EXEC DBMS_SNAPShOT.REFRESh('t_a ','C');
第一个参数是要刷新的快照名
第二个参数是刷新的相关方式,F----FAST, C---COMPLETE
7、说明:
a) 建立快照日志时oracle网站数据库为咱们建立了一个基于a的触发器(我没有找到)
tlog$_a和快照日志表mlog$_a(这个已经找到);
网上朋友说在建立快照时建立了一些表,视图之类的,但是我只找到了表,其他的没有找到,希望得到大家的帮助。
总结的假如如果有什么问题请大家多多指出,共同进步。
关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。