ljzloveyj ljzloveyj
一屋不扫,何以扫天下!
关注数: 55 粉丝数: 41 发帖数: 867 关注贴吧数: 4
【oracle相关】关于数据闪存恢复的说明 【问题】在沙坪坝某医院因某些原因导致当天早上8点半至9点的时间内费用相关表中的记录丢失,丢失后打算用oracle的归档日志能够全部恢复回来,没有马上用闪存方式恢复费用相关表的一部份数据,当查看归档日志时,归档设置的是以半小时归档备份,因时间长了,所以导致这部份数据无法恢复,只能手工处理! 【分析】oracle的闪回技术可以快速的将数据库恢复到较早的时间点;也可以将表恢复到过去的某个时间点而不必从备份进行还原;闪回删除可还原意外删除的表。 归档日志中设置了归档时间,始终有间隔时间未及时归档备份,当发现某些表中数据丢失后,时间很及时的情况下,发现因数据丢失后,将重要的表数据能用闪存恢复的,尽量及时恢复一部份数据; 【处理】当表中数据误删的恢复办法,开启归档,闪存恢复 1.通过select timestamp_to_scn(to_timestamp('2014-03-13 09:00:00','YYYY-MM-DD HH:MI:SS')) from dual; 查找时间段删除结果:13526973 2.将删除时间转换为scn select * from reportinfo AS OF SCN 13526973 ----wher id='..........' 将删除的reportinfo表中的scn点的数据取出 3.然后可以根据这个数据进行还原操作 create table reporttest as select * from reportinfo where 1=0; insert into reporttest select * from reportinfo AS OF SCN 13526973; --上面两句应该可以合成一句 --create table reporttest as select * from reportinfo AS OF SCN 13526973; 这是reporttest表中就是scn点的reportinfo数据.处理即可
【oracle相关】通过数据泵将win系统oracle数据库导入到linux下 【问题】不用rman,只采用oracle中数据泵导入导出工具将win系统下的oracle数据导入到linux系统下 【分析】 当数据不是很大,且对rman恢复不熟悉的朋友,可以用数据泵工具来导入导出,操作相对来说繁琐,但相对简单 【处理】 第一步:在linux创建orcl实例,并手工创建表空间以及用户,如果按用户导出的,需要执行手工创建表空间和用户,如果是按全库导入,可以不执行此步,脚本如下: --创建表空间的脚本: SELECT 'create tablespace ' || a.Name || ' datafile ' || Chr(39) || b.Name || Chr(39) || ' size ' || Bytes || ' autoextend on next 50M maxsize unlimited;' FROM V$tablespace a, V$datafile b WHERE a.Ts# = b.Ts# AND a.Ts# > 4 UNION ALL SELECT 'create temporary tablespace ' || a.Name || ' tempfile ' || Chr(39) || b.Name || Chr(39) || ' size ' || Bytes || 'autoextend on next 50M maxsize unlimited;' FROM V$tablespace a, V$tempfile b WHERE a.Ts# = b.Ts# AND a.Ts# <> 3; --创建用户 ...... 第二步 冷备orcl 并在测试数据库恢复,恢复完成后我们用这个库操作(可以测试所用) 第三步 禁用zlchs所有外键约束,复制并执行下来SQL,将查询出来的数据复制粘贴出来后在执行 select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R' 第四步 导出以下用户数据,这里命名为"user.dmp",以便恢复(当然可以全库导出,不按用户导出): expdp system/zlsoft@orcl1 DIRECTORY=zlchs DUMPFILE=orcl20130111.dmp logfile=orcl20130111.log DATA_OPTIONS=XML_CLOBS schemas= (bhdata,bhmail,zlchs,SLReport,zl_inquiries,bhdata1,cxdata,zlperf,zlchsinsure,hji) 1) 导出全库数据,只导出对象不导数据(此步骤是针对oracle认证的用户所用,导出所有业务用户): expdp 'system/zlsoft' full=y directory=zlchsdir dumpfile=only1215.dmp logfile=metadata_only1215.LOG DATA_OPTIONS=XML_CLOBS content=metadata_only 第五步 将我们之前备份的数据库"user.dmp"压缩,用Xmanager中的FTP工具传数据到linux文件夹下(需要用到linux的一基本命令,需要自己学学),并解压授权 (如果在root用户下解压不起,试着在oracle用户下解压:su - oracle) unzip 你的压缩文件.zip chmod 777 解压出来的文件 第六步 导入数据之前备份的业务数据,这里需要建立数据泵的目录名zlchsdir,将解压的文件放到zlchsdir路径下,在本地计算机(创建服务)和linus下执行下面脚本 impdp system/zlsoft@orcl1 DIRECTORY=zlchsdir DUMPFILE=user.dmp logfile=ZLCHS121511.log full=y 2) 找一台新orcl实例,建立好数据泵后,以下面的语句导入上面的对象文件,主要是生成aqa.sql的脚本文件, impdp 'system/root2012_DCITS@orcl1' full=y directory=zlchsdir dumpfile=only1107.dmp logfile=metadata_only1107.LOG SQLFILE=aqa.sql content=metadata_only 3)找到生成aqa.sql文件,并找到oracle认证中的业务用户脚本和授权脚本 4)连接到linux下用plsql刷上面的用户脚本和授权脚本 第七步 因为个人文档记录较大,需要创建数据链路导 "个人文档记录" -- Create database link create database link ZLCHS250 connect to ZLCHS using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 32.110.139.12)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )'; --注意事项------查询表空间大小的-- SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(G)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(G)", TO_CHAR(decode(D.TOT_GROOTTE_MB * 100,0,0,ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2)), '990.99') "使用比", F.TOTAL_BYTES "空闲空间(G)", F.MAX_BYTES "最大块(G)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024*1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024*1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024*1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 4 DESC --------如果有满了的情况,需要增加表空间 ALTER TABLESPACE ZHLOB ADD DATAFILE 'D:\PATH\ZHLOB2.dbf' SIZE 10M AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED; ALTER TABLESPACE ZHLOB ADD DATAFILE 'D:\PATH\ZHLOB3.dbf' SIZE 10M AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED; --------通过手工分批次导入个人文档记录,这里的序号是我手工添加了一个字段,并且指定了序号 insert into 个人文档记录 (id, 个人id, 文件类型, 原型id, 原型名, 服务id, 创建人, 创建时间, 文档状态, 修改人, 修改时间, 版次, 打印次数,全文信息, 内容信息) select id, 个人id, 文件类型, 原型id, 原型名, 服务id, 创建人, 创建时间, 文档状态, 修改人, 修改时间, 版次, 打印次数,全文信息, 内容信息 from 个人文档记录 @zlchs250 t where t.序号>0 and t.序号 <=20000 第八步 启用备份前数据库,和恢复后数据所有外键约束 select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R' 至此导入完成,进入详细的功能,数据等测试
【oracle相关】用数据泵获取ZLCHS中所有oracle认证的登录用户 【问题】: 在实施前期,ZLCHS采用的是BH本地认证用户,现在我们需要将本地用户导入到ORACLE认证的登录方式,如何采用数据泵导入导出的办法获取ZLCHS的登录用户呢? 【分析】: 通过数据泵的方式解决以上问题; 【处理】: 1 在需要导出的数据库上建立数据泵的工作目录 ”zlchsdir” ,用sys 用户登录,执行 Createdirectory zlchsdir As 'd:\zlchs备份' 语句 ,并且在根目录建立” zlchs备份”文件夹; 2 通过以下语句导出全库数据对象(content=metadata_only只导出对象不导数据) expdp 'system/root2012_DCITS@orcl1' full=y directory=zlchsdirdumpfile=only1107.dmp logfile=metadata_only1107.LOG DATA_OPTIONS=XML_CLOBScontent=metadata_only 3 找一台安装有oracle,并建立orcl实例的机子,建立数据泵后,执行以下脚本,将对象导入到此orcl实例中(SQLFILE=aqa.sql是在ZLCHS备份文件中建立aqa文件,此文件中就是导入数据对象的SQL,通过这个文件,我们就可以找到建立相关用户的信息) impdp 'system/root2012_DCITS@orcl1' full=y directory=zlchsdirdumpfile=only1107.dmp logfile=metadata_only1107.LOG SQLFILE=aqa.sqlcontent=metadata_only 4 只需要导入系统用户中creat user 以及GRANT 相关ZLCHS登录用户 就可以停止数据库orcl服务,终止导入,整理后的脚本如附件: 5 最后可以通过PL/SQL执行上面创建好的脚本,就可以成功导入以ORACLE认证的所有ZLCHS登录用户
1 下一页