精华内容
下载资源
问答
  • mycat全局表一致性检查

    千次阅读 2017-11-02 16:46:05
    mycat全局表一致性检查通过内部列_mycat_op_time来实现,具体实现方式如下 1.检测全局表的内部列是否存在 checker.checkInnerColumnExist(); 检测的实现是通过一个SQLJob来异步操作的,对应的SQL语句为: select...

    mycat全局表一致性检查通过内部列_mycat_op_time来实现,具体实现方式如下
    1.检测全局表的内部列是否存在
    checker.checkInnerColumnExist();
    检测的实现是通过一个SQLJob来异步操作的,对应的SQL语句为:
    select count(*) as inner_col_exist from information_schema.columns where column_name=’_mycat_op_time’ and table_name=’user’ and table_schema=’db1’;
    如果返回的inner_col_exist 大于0,那么就表示存在内部列,如果等于0,那么就表示不存在内部列。

    如果PhysicalDatasource上某个db的全局表没有内部列,那么将这些db记录在一个list中,然后在SQL 拦截过程中进行判断,如果是全局表,但是没有内部列,那么就输出警告,不对SQL进行拦截改写,因为该全局表没有内部列,无需改写SQL。在第一项检测完成之后,才能进行第二项检测。

    2.检测全局表的记录总数
    checker.checkRecordCout();
    检查过程是类似的,都是通过SQLjob来完成的,只是对应的语句不一样:
    select count(*) as record_count from user; (假设user表为全局表)

    3.检测全局表的时间戳的最大值
    checker.checkMaxTimeStamp();
    检查过程是类似的,都是通过SQLjob来完成的,只是对应的语句不一样:
    select max(_mycat_op_time) as max_timestamp from user (假设user表为全局表)

    三项检查完成之后,就获得了如下所示的结果:
    全局表的记录总数(user表为全局表,并且系统有三个db):
    db1. user.record_count: 43546565
    db2. user.record_count: 43546565
    db3. user.record_count: 43546565
    全局表的最大时间戳:

    db1. user.max_timestamp: 1450578802241
    db2. user.max_timestamp: 1450578802241
    db3. user.max_timestamp: 1450578802241

    然后前端,比如 mycat-eye 就可以将该结果显示出来。目前直接在log中输出,也可以考虑引入像H2这样的Java实现的嵌入式数据库来记录该结果。 H2实现为仅仅一个jar包,十分适合作为mycat-server层面的一个非文件存储方式。有一些信息如果存在在文件中,查询起来不太方便,比如上面的检测结果就是如此。实际的SQLJob的执行,主要参照了原有的heartbeat的实现,主要在下面两个类中:
    MySQLConsistencyChecker
    MySQLConsistencyHelper
    具体可以参考代码,和heartbeat的实现基本是一样的。
    每一次定时检查,会对所有全局表进行上述三项检测。
    总结成一句:
    SQL的拦截实现记录全局表被修改时的时间戳;定时任务实现对全局表记录总数和时间戳最大值的获取。

    4.如何使用全局表一致性检测
    1).在所有全局表中增加一个 bigint 的内部列,列名为 _mycat_op_time, (alter table t add column _mycat_op_time bigint [not null default 0]); 同时建议在该列上建立索引(altertable t add index _op_idx(_mycat_op_time))
    2). 在对全局表进行crud时,最好将内部列当作不存在一样,也就是最好不要对内部列update,insert等操作,不然会在Log中进行警告:不用操作内部列;
    3). 因为全局表多了一个内部列,所以在对全局表进行insert时,必须携带列名,也就是insert into t(id,name) values(xx,xx),不能使用insert into t values(xx,xx); 因为会报错:列数不对。

    展开全文
  • 一致性检查(consistency check)

    千次阅读 2019-04-08 21:47:12
    最近看论文看到深度传播方面的知识,随后想起之前做过视差一致性检查方面的工作,所以就小结一下,一致性检查方面的知识。 彩色一致性检查 原理:彩色一致性是指对于一幅图片,如果空间相邻区域像素亮度值相似的话...

    最近看论文看到深度传播方面的知识,随后想起之前做过视差一致性检查方面的工作,所以就小结一下,一致性检查方面的知识。

    彩色一致性检查

    • 原理:彩色一致性是指对于一幅图片,如果空间相邻区域像素亮度值相似的话,它们的颜色也是类似的。随后建立约束模型,约束为当前像素的颜色与邻域像素的颜色的误差

    深度一致性检查 —— 深度传播

    • 原理:如果一幅图片的空间相邻区域亮度值类似的话,那么它的深度值也是类似的。根据这一原理,将深度估计问题进行优化建模,通过求解这个优化问题来获得整个图像的深度图,这就是基于深度一致性的深度传播算法的基本原理。
    • 优化模型:计算下面的代价函数:
      minDJ(Dnonkey)=r(Dnonkey(r)sN(r)wrsDnonkey(s))2sub.toDnonkey(ri)=Dkey(ri) \begin{array}{c}{\min _{D} J\left(D^{n o n-k e y}\right)=\sum_{r}\left(D^{n o n-k e y}(r)-\sum_{s \in N(r)} w_{r s} D^{n o n-k e y}(s)\right)^{2}} \\ {\quad s u b . t o D^{n o n-k e y}\left(r_{i}\right)=D^{k e y}\left(r_{i}^{\prime}\right)}\end{array}
    • N(r)N(r)是像素rr的一个邻域窗口,wrsw_{rs}是邻域窗口的加权函数。
    • 上面公式中,Dnonkey(ri)=Dkey(ri)D^{non-key}(r_i) = D^{key}(r_i^\prime)是代表通过特征点匹配,将关键帧的深度值赋予给非关键帧中对应的像素点。
    • 代价函数计算的是非关键帧中当前元素深度和邻域元素深度的关系。
      深度传播框架
    展开全文
  • MySQL数据一致性检查工具

    千次阅读 2013-11-08 15:43:24
    MySQL数据一致性校验:mysqldbcompare && pt-table-checksum
    数据的不一致常令DBA被客服或业务部门投诉,那么一致性便是耳根清净[虽然不能这么说]的良方
    这里介绍MySQL官方的mysqldbcompare(python写的)和percona公司的pt-table-checksum(perl写的)

    mysqldbcompare的作用是

    对比两个数据库的表结构、表数据的一致性并能生成对应补偿的SQL,如主备、线上线下


    对于差异的展现能通过参数--difftype调控
    ① unified (default)
    ② context
    ③ differ
    ④ sql

    例子

    mysql> select * from db1.t;
    +----+------+
    | id | name |
    +----+------+
    |  1 | a    |
    |  2 | b    |
    |  3 | c    |
    +----+------+
    3 rows in set (0.00 sec)
    
    mysql> select * from db2.t;
    +----+------+
    | id | name |
    +----+------+
    |  1 | a    |
    |  2 | d    |
    |  3 | c    |
    +----+------+
    3 rows in set (0.00 sec)
    
    [mysql@odd ~]$ mysqldbcompare --server1=root:oracle@localhost --server2=root:oracle@192.168.15.133:3306 db1:db2 --changes-for=server1 --run-all-tests --difftype=sql
    # server1 on localhost: ... connected.
    # server2 on 192.168.15.133: ... connected.
    # Checking databases db1 on server1 and db2 on server2
    #
    
    # WARNING: Cannot generate SQL statements for these objects.
    # Check the difference output for other discrepencies.
    --- `db1`
    +++ `db2`
    @@ -1 +1 @@
    -CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */
    +CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET latin1 */
    # WARNING: Could not generate changes for {0}. No changes required or not supported difference.
    
    # WARNING: Cannot generate SQL statements for these objects.
    # Check the difference output for other discrepencies.
    --- `db1`
    +++ `db2`
    @@ -1 +1 @@
    -CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */
    +CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET latin1 */
    
    #                                                   Defn    Row     Data   
    # Type      Object Name                             Diff    Count   Check  
    # ------------------------------------------------------------------------- 
    # TABLE     t                                       pass    pass    FAIL    
    #
    # Transformation for --changes-for=server1:
    #
    
    # Data differences found among rows:
    UPDATE `db1`.`t` SET `name` = 'd' WHERE `id` = '2';
    
    
    
    # Database consistency check failed.
    #
    # ...done
    

    在介绍pt-table-checksum之前,先看两组同学的测试






    文档有句非常霸气的话:
    No matter how large the server is, pt-table-checksum works equally well.
    底气就在于Percona将表split成一个个chunk,基于chunk计算crc32值,每次checksum后
    都会采集并分析Server的性能信息,并以此来调整chunk大小,避免对线上业务造成冲击
    而且这只是其中一个比较耀眼的安全措施,当然文档还解释了很多保护服务器的特性


    校验结束后,在每个从库上,执行如下的sql语句即可看到是否有主从不一致发生:  

    select * from percona.checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc) \G

    一些限制
    ① 表要有主键或唯一性索引,否则无法chunk表
    ② 主备checksum的库和表需要完全相同
    ③ binlog_format必须是statement模式


    重要参数

    安全选项:

    –check-replication-filters 是否检查复制过滤规则 
    –check-slave-tables 检查是否所有从库都有被检查的表和列
    –chunk-size-limit 每个chunk最大不能超过这个大小,超过就忽略它

    限速选项:

    –check-interval 多久检查一次主从延迟、主库负载是否达到上限
    –check-slave-lag 是否只检查这个从库的延迟 
    –max-lag 最大延迟,超过这个就等待 
    –max-load 最大负载,超过这个就等待

    过滤选项:

    –databases 只检查某些库 
    –tables 只检查某些表 
    这些过滤选项在修复不一致数据后,检查修复效果很有用。

    其他选项

    –resume 因某种原因中断,下次接着执行,不用从头开始 
    –chunk-time 每个chunk被计算的时间,一般默认为0.5秒

    简单范例

    # pt-table-checksum --user=root --password=oracle  --recursion-method=processlist


    参考资料

    http://dev.mysql.com/doc/workbench/en/mysqldbcompare.html
    http://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html
    http://nettedfish.sinaapp.com/blog/2013/06/04/check-replication-consistency-by-pt-table-checksum/


    By 迦夜

    2013-11-8

    Good Luck

    展开全文
  • 物理一致性和逻辑一致性检查 DBV工具 特点:只读,不会做修改  可以在线检查,不需要关闭数据库。  不能检查控制文件和日志文件,而只能检查数据文件  可以检查ASM文件,但数据库必须open,需要通过...
    物理一致性和逻辑一致性检查

    DBV工具
    特点:只读,不会做修改
              可以在线检查,不需要关闭数据库。
              不能检查控制文件和日志文件,而只能检查数据文件
              可以检查ASM文件,但数据库必须open,需要通过USERID指定用户
              比如dbv file=+DG1/ORCL/datafile/system01.dbf userid=system/sys

    在许多UNIX平台下,DBV要求数据文件有扩展名。如果没有(裸设备)可以通过建立链接,然后对链接文件进行操作,比如:ln -s /dev/rdsk/mydevice /tmp/mydevice.dbf

    某些平台下,DBV工具不能检查超过2GB的文件,如果碰到DBV-100错误,请先检查文件大小,Metalink Bug 710888 对这个问题有描述。

    可直接输入dbv 获取帮助
    BLOCKSIZE,要与检查的文件的blocksize一致。缺省8192
    SEGMENT_ID,可以指定要检查的段<tsn.segfile,segblock>
    例子1、检查users01.dbf
    [oracle@Rhel5 ~]$ dbv file=/u01/oradata/10G101/users01.dbf blocksize=8192
                                file要输入绝对路径,否则可能会报dbv-600错误
    DBVERIFY: Release 10.2.0.5.0 - Production on Mon Aug 5 23:34:28 2013

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

    DBVERIFY - Verification starting : FILE = /u01/oradata/10G101/system01.dbf
    Page 28618 is marked corrupt
    Corrupt block relative dba: 0x00406fca (file 1, block 28618)
    Bad check value found during dbv:
    Data in bad block:
    type: 6 format: 2 rdba: 0x00406fca
    last change scn: 0x0000.00029ab9 seq: 0x1 flg: 0x04
    spare1: 0x0 spare2: 0x0 spare3: 0x0
    consistency value in tail: 0x9ab90601
    check value in block header: 0xc694
    computed block checksum: 0x7400


    DBVERIFY - Verification complete

    Total Pages Examined         : 57600
    Total Pages Processed (Data) : 38088
    Total Pages Failing   (Data) : 0
    Total Pages Processed (Index): 7049
    Total Pages Failing   (Index): 0
    Total Pages Processed (Other): 1867
    Total Pages Processed (Seg)  : 1
    Total Pages Failing   (Seg)  : 0
    Total Pages Empty            : 10595
    Total Pages Marked Corrupt   : 1
    Total Pages Influx           : 0
    Highest block SCN            : 676674 (0.676674)


    例子2、检查segment TEST
    查看对象的tsn、segfile、segblock
    SQL> select t.ts#,s.header_file,s.header_block
     from v$tablespace t,dba_segments s
     where s.segment_name='TEST
     and t.name=s.tablespace_name;

       TS#     HEADER_FILE   HEADER_BLOCK
    ----------    -----------           ------------
         0            1                      56377

    [oracle@Rhel5 10G101]$ dbv userid=system/password segment_id=0.1.56377
    DBVERIFY: Release 10.2.0.5.0 - Production on Mon Aug 5 23:03:54 2013

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

    DBVERIFY - Verification starting : SEGMENT_ID = 0.1.56377


    DBVERIFY - Verification complete

    Total Pages Examined         : 2
    Total Pages Processed (Data) : 1
    Total Pages Failing   (Data) : 0
    Total Pages Processed (Index): 0
    Total Pages Failing   (Index): 0
    Total Pages Processed (Other): 0
    Total Pages Processed (Seg)  : 1s
    Total Pages Failing   (Seg)  : 0
    Total Pages Empty            : 0
    Total Pages Marked Corrupt   : 1
    Total Pages Influx           : 0 
    Highest block SCN            : 666485 (0.666485)


    也可以使用RMAN工具来确认位置
    RMAN> backup check logical validate datafile 1;
    结果查询:
    SQL> select file#,block#,blocks from v$database_block_corruption;

         FILE#     BLOCK#       BLOCKS
    ---------- ----------            ----------
         1       28618                 1



    展开全文
  • MySQL数据一致性检查的几个工具

    万次阅读 2017-03-13 01:09:46
    pt-table-checksum是在线的主从数据一致性检查工具,能够对大数据量的数据库进行高效的主从数据一致性检查,能够自动控制检查数据量的大小,避免对线上业务造成较大的影响。下面对展示该工具的常见几种用法,更多...
  • 在PERC管理的RAID上运行一致性检查

    千次阅读 2019-01-10 01:11:22
    参考戴尔官方论坛:https://www.dell.com/community/Systems-Management/Run-a-Consistency-Check-on-a-PERC-managed-RAID-without-OMSA/m-p/4767003 ...RAID卡有两种一致性检查方式 Patrol read consist...
  • Ceph实现了Scrub机制,采用一种通过后台扫描的方案来解决ceph数据一致性的问题。
  • 数据块一致性检查的4种方法

    千次阅读 2012-12-08 11:10:00
    ㈠ 什么是数据块一致性? 每一个数据块头部都有一个“校验和”字段 ...如果有差异,Oracle就会抛出ORA-1578 也就是,整个校验过程: 写回时,计算并保存 读入时,计算并比较 通过校验和字段进行检查叫物理一致性检查...
  • 数据字典一致性检查HCHECK

    千次阅读 2010-09-28 22:25:00
    测试环境中删除'CAIC_YZ'表空间的时候总是说表空间存在对象,sql检查结果返回值都是0,说明该表空间没有任何对象。Select count(*) from dba_tablespaces t where t.tablespace_name='CAIC_YZ';Select count(*) ...
  • 一致性检查的具体含义是什么

    千次阅读 2006-07-07 09:27:00
    一致性检查的具体含义是什么? 环境 产品:Lotus Domino Server平台:无关软件版本:所有
  • 何谓端到端的数据校验?是指应用层在写入数据时,在经过每个数据模块时,都计算并增加一个校验和信息,并将这些校验和信息和...同样在数据读取时,应用层在获取数据块和从磁盘读取到校验信息后,也需要再次校验一致性
  • 如何检查数据库中数据的一致性

    千次阅读 2017-11-12 14:55:00
    数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。Dbcc主要有两个功能: 使用checkstorage 或 checktable 及 checkdb 在页一级和行一级检查页链及数据指针。 使用checkstorage, checkalloc,...
  • 未通过ovf规范一致性或虚拟硬件合规性检查问题描述:在导入虚拟机模板(ovf)时,提示“未通过ovf规范一致性或虚拟硬件合规性检查”如图:问题解决方法:针对于ovf模板,目录对应下面有三个扩展名为vmdk、ovf、mf...
  • 怎么停止DOMINO对一个数据库进行一致性检查      SKIP_FIXUP=1    in the notes.ini and restart
  • 一致性检查警告:   WARNINGS: BUSINESS MODEL SukiApp Lite: [39009] 逻辑事实表 F0 Revenue Base Measures 的聚合源 F0 Revenue Base Measures.LTS2 Revenue Facts Aggregate 1 没有联接到适当明细级别的 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 519,449
精华内容 207,779
关键字:

产品一致性检查就是检查