Welcome 微信登录

首页 / 数据库 / MySQL

[Oracle] 利用自治事务实现审计功能

[Oracle] 利用自治事务实现审计功能

在一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。假设现在有这样一个需求,不能对某个表进行某些操作(如更新),一旦有这类操作,就强制整个回滚,并且在审计日志中记录该次违规操作。现在的问题是当事务回滚之后,日志中的记录也会跟着被回滚,这时就可以利用自治事务来防止这个问题。首先,定义日志表,用于审计。create table error_logs( i...
[Oracle] 分布式事务和两阶段提交(2PC)

[Oracle] 分布式事务和两阶段提交(2PC)

分布式事务是指发生在多台数据库之间的事务,Oracle中通过dblink方式进行事务处理,分布式事务比单机事务要复杂的多。大部分的关系型数据库通过两阶段提交(2 Phase Commit 2PC)算法来完成分布式事务,下面重点介绍下2PC算法。1、分布式事务的组成在分布式事务中,主要有以下几个组成部分:Client:调用其它数据库信息的节点Database:接受来自其它节点请求的节点Global Coordinator (GC):发起分布式事务的节点Loc...
[数据库原理] 事务的隔离等级 (ANSI标准)

[数据库原理] 事务的隔离等级 (ANSI标准)

并发与数据读取当多个会话同时访问(操作)相同的数据时,将会出现一些意想不到的结果,这包括:– 脏读 -- Dirty reads– 不可重复度-- Non-repeatable reads– 幻读 -- Phantom reads1、脏读脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个...
[Oracle] 常见的等待事件

[Oracle] 常见的等待事件

db file scattered read对于一些频繁访问的表,如果没有建立索引或没有建立合适的索引,Oracle只能对其进行全表扫描,就会导致大量该等待事件。全表扫描时,读取的数据在磁盘上一般是连续的,但是读到内存时却是不连续的,因此该事件命名为离散读(scattered read),注意不要被它的名字所迷惑。一次多块读取的数量受参数DB_FILE_MULTIBLOCK_READ_COUNT的影响。在实际诊断过程中,可以通过v$session_wait...
[Oracle] 谈谈Lock和Latch

[Oracle] 谈谈Lock和Latch

首先谈谈它们的共同点吧:它们本质上都是一种对资源的独占锁定,都是由并发引起(如果数据库只有一个session,就谈不上锁定)。接着着重谈谈它们的不同点:首先,它们的目的不一样,enqueue (即Lock,Oracle官方文档混合使用这两个名词,在等待事件里,可以看到大量的enqueue,其实就是lock)是为了解决业务层面的数据争用,而latch是为了解决内存资源的争用。其次,它们的运行方式不一样,enqueue采用排队方式,先到先得,而latch的竞争...
[Oracle] 锁(Lock)的探讨

[Oracle] 锁(Lock)的探讨

1、锁(Lock)的原则Oracle当中的锁通常是业务层面的问题,锁是为了在并发的情况下保证数据库的一致性,因此没有并发就没有锁。Oracle的锁有如下几个原则:只有被修改时,行才会被锁定,因为有UNDO的关系,读不会产生行锁。当一条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。当某行被修改时,它将阻塞别人对它的修改。当一个事务修改一行时,将在这个行上加上行锁(TX),用于阻止其它事务对相同行的修改。读永远不会阻止写,但唯一...
MySQL 在Mac 控制台中 SQL乱码

MySQL 在Mac 控制台中 SQL乱码

1、场景:今天在upload到客户机器上,mysql数据库在备机上,备机在局域网中,需要的ssh主机,再ssh备机 (备机) 有点类似下面的架构导致我不能直接工具connection上去,只好SSH上去,然后mysql -u root -p 上去,insert update,但是在insert select 等操作数据的时候,出现了乱码。第一个想到了便是 variables 没有设置好,show了下,确实全部set character_set_client...
Oracle预处理查询异常

Oracle预处理查询异常

在工作中发现这样的问题:在Oracle的10g之前的版本,存在一个bug,即用PreparedStatement预处理去动态查询数据时,用占位符?代替的字段,如果是char类型的,那么在执行时用来代替?的变量必须和该字段的长度相同,如果字段长度不足,用空格补充够的位数,否则查询不到正确的结果。如果该字段不是char类型的就不存在这样的问题。昨天出了一个奇怪的问题,hibernate通过实体Id(char(10)型)取得数据,session.find("fr...
数据类型不一致导致的SQL不走索引

数据类型不一致导致的SQL不走索引

前几天,同事发来一条SQL,说是更新操作的时候执行的很慢,我看了下,数据量也不是很大。再查看执行计划,发现是执行路径错误导致的,可是为什么会走错误的执行路径呢?统计信息并没有太大的问题。在这里模拟下:数据准备:--1.数据准备,表一:DROP TABLE t_test_1;create table T_TEST_1( owner VARCHAR2(30), object_name VARCHAR2(128), subobject_name VAR...
学习Oracle需要掌握的重要知识点

学习Oracle需要掌握的重要知识点

学习Oracle需要掌握的重要知识点1.基础语法这个是必须要会 的,什么select,insert,update,where 等等。掌握这些知识基本上可以做一些跟验证的工作,测试的工作。目标定位于运维或是测试。2.存储过程的编写要知道如何写存储函数,存储过程。相互之间如何调用。掌握这个知识基本上可以做一些基础开发工作。目标定位位于软件开发。3.包的设计知道什么是包,如何设计包。掌握这个知识点基本上可以做数据库的设计工作。目标定位于高级软件开发。4.并发,事...
RMAN 提示符下执行SQL语句

RMAN 提示符下执行SQL语句

在手动恢复数据库时,有时候需要在SQL*Plus提示符以及操作系统提示符,RMAN提示符下来回切换显得有些繁琐。实际上RMAN为我们提供了命令行下执行一些简单的SQL语句以及PL/SQL的方法,以避免上述情形。本文描述了RMAN提示符下的一些常用命令及其用法。1、RMAN提示符下执行SQL语句语法: SQL "<command>" ;语法比较简单,就是提示符下输入SQL,后接SQL命令,命令用单引号括起来command 通常为可执行的SQL命令...
Oracle存储过程实现导出表结构

Oracle存储过程实现导出表结构

要将Oracle数据库中的表结构全部倒出来,有分区表和非分区表,涉及到的字段有number、data、timestamp、varchar2、char。所以只针对了这几个字段的表的导出,如果表有其类型字段,则需要添加代码。分区表都是以时间做分区的,所以导出来的分区表结构都是以时间分区的。只是根据了自己实际情况写的,根据不同的情况要改写!存储过程带一个参数,默认为Y,导出分区表的分区,如果指定其他值,如 execu table_frame("N"),则只导出表...
Oracle数据库名与Oracle实例名的关系

Oracle数据库名与Oracle实例名的关系

1 数据库名1.1 数据库名的概念数据库名(db_name)就是一个数据库的标识,就像人的身份证号一样。如果一台机器上装了多个数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。数据库名在$Oracle_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora或$ORACLE_HOME/dbs/SPFILE...
<< 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 >>