oracle 物化视图,mlog$_视图和rupd$_视图,物化视图的建立和使用


前言

  在分布式的海量数据环境下,信息查询的速度问题显得非常重要,为此设计了物化视图(mv)

注:
提高查询速度的几种方式:
  调整sga和pga;
  调整sql语句,使用绑定变量(在sql语句的条件中使用变量而不是常量);
  使用物化视图;
  系统结构上,使用读写分离(读库、写库进行实时数据同步更新,a.在写库上使用logminer进行日志挖掘,传输到读库上,重做日志;b.在读库和写库之间使用queue)

oracle的复制技术:
  物化视图、DG、消息队列


物化视图

1. 简介

  Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,即快照。

视图中数据不存在;物化视图数据实际存在

  通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
  物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;
  物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

2. 创建物化视图选型

2.1 刷新的2种模式:

  ON DEMAND 仅在该物化视图需要被刷新了,才进行刷新(REFRESH),以保证和基表数据的一致性;一般需要建立一个job,在job里按照某个固定周期调用dbms_mview刷新
  ON COMMIT一旦基表有了COMMIT,即事务提交,立刻更新物化视图,使得数据和基表一致

2.2 刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。

  FAST 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
  COMPLETE 刷新对整个物化视图进行完全的刷新。
  FORCE Oracle在刷新时首选会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式
  NEVER 物化视图不进行任何刷新。

2.3 查询重写(Query Rewrite):ENABLE QUERY REWRITE、DISABLE QUERY REWRITE两种

  查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。

3. 基于主键的物化视图

3.1 使用条件

  远程表必须包含主键

3.2 远端操作

  创建主键表,并创建基于主表的视图日志

如:
远端数据库使用scott中dept表,创建视图日志:

create materialized view log on dept;

在这里插入图片描述

select * from user_tables;
RUPD$_视图
MLOG$_视图

在这里插入图片描述

在这里插入图片描述

3.3 本地操作

使用hr用户模拟本地数据库
SYS用户授权:

grant select on scott.dept to hr;
grant create materialized view to hr;
grant select on scott.MLOG$_DEPT to hr;

HR用户创建实体化视图:

create materialized view dept_view refresh fast start with sysdate  next sysdate+1/1440 with primary key
 as select * from scott.dept;

在这里插入图片描述

使用任务创建物化视图

create materialized view dept_view as select * from scott.dept;
create or replace  procedure test as 
	begin
	 dbms_mview.refresh('DEPT_VIEW');
	end;
	/
variable job number
	begin
	dbms_job.submit(:job,'test;',sysdate,'sysdate+1/1440');
	end;
	begin
	dbms_job.run(:job);
	end;

远程数据库更新后,本地数据库物化视图更新:
在这里插入图片描述
在这里插入图片描述

3.4 删除物化视图
 DROP MATERIALIZED VIEW DEPT_VIEW;

在这里插入图片描述


4. 基于rowid的物化视图

4.1 使用条件

  表没有主键

4.2 远端操作

使用hr用户模拟本地数据库
创建没有主键的表,表的rowid可确定唯一一行

create table SCOTT.MVDEPT
(
  deptno NUMBER(2) not null,
  dname  VARCHAR2(14),
  loc    VARCHAR2(13)
);
4.3 本地操作

使用hr用户模拟本地数据库
SYS用户授权:
授权:

grant select on scott.MVDEPT to hr;

创建实体化视图:

使用任务创建物化视图

create materialized view mvdept_view refresh with rowid as select * from scott.mvdept;
create or replace  procedure test as 
	begin
	 dbms_mview.refresh('MVDEPT_VIEW');
	end;
	/
variable job number
	begin
	dbms_job.submit(:job,'test;',sysdate,'sysdate+1/1440');
	end;
	begin
	dbms_job.run(:job);
	end;

远程数据库更新后,本地数据库物化视图更新:
在这里插入图片描述
在这里插入图片描述

5. 生产环境,使用物化视图和expdp实现生产库的逻辑备份的思路

  使用netca,建立一个服务,对应生产库的服务器;
  使用dblink备份库连接到主库;
  即可在备份库访问主库的数据,对不同的表建立物化视图;
  在服务器上使用crontab定时执行脚本,执行expdp命令

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误信息是由于 MySQL 找不到一个有效的检查点 (checkpoint) 导致的。在 MySQL 中,检查点是一个内部数据结构,用于记录数据库的状态,防止在恢复数据库时出现数据丢失。 当 MySQL 启动时,它会检查最后一个检查点,并从该检查点开始恢复数据。如果 MySQL 找不到最后一个检查点,或者找到的检查点已经过时或已损坏,则会出现类似 “Ignoring the redo log due to missing MLOG_CHECKPOINT” 的错误信息。 解决这个问题的方法是尝试恢复数据库。您可以使用 `mysqlbinlog` 命令来查看 MySQL 重做日志文件,并尝试手动恢复数据。 具体步骤如下: 1. 找到 MySQL 重做日志文件的位置。在 MySQL 配置文件中查找 `datadir` 参数,该参数指定了 MySQL 数据目录的位置。在该目录下,找到名为 `ib_logfile0` 和 `ib_logfile1` 的文件,这些文件就是 MySQL 重做日志文件。 2. 备份 MySQL 数据库。在执行任何恢复操作之前,务必备份数据库,以避免数据丢失。 3. 将重做日志文件转换为可读格式。使用以下命令将重做日志文件转换为可读格式: ```shell mysqlbinlog --start-position=<checkpoint_position> --stop-position=<end_position> <logfile> > <output_file> ``` 其中,`<checkpoint_position>` 是检查点的位置,可以在错误信息中找到;`<end_position>` 是重做日志文件的结尾位置,可以通过查看文件大小来确定;`<logfile>` 是重做日志文件的路径;`<output_file>` 是输出文件的路径。 4. 手动恢复数据。根据输出文件中的信息,手动恢复数据。这可能需要一些 MySQL 知识和经验。 5. 重启 MySQL 服务。在完成恢复操作后,重启 MySQL 服务,并确保一切正常。 需要注意的是,手动恢复数据有一定的风险,可能会导致数据丢失或不一致。因此,在进行恢复操作之前,请务必备份数据库,并确保您知道自己在做什么。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值