数据库技术
文章平均质量分 65
conggova
数据库、大数据、数据仓库、数据挖掘
展开
-
完整的RMAN备份示例
备份策略备份时间:每天午夜12点开始。 备份策略: 一 二 三 四 五 六 日 增 增 增 增 增 增 全RMAN配置:控制文件自动备份OFF。 冗余度为3。备份脚本:0级备份 /home/oracle/backupscripts/level0.sh#!/usr/bin/bash#backup script for level 0source /原创 2017-09-02 10:48:25 · 420 阅读 · 1 评论 -
Oracle 存储提纲(stored outline)
详细参考 Oracle性能优化求生指南Stored outline是为了保证执行计划的稳定性,尤其是指在Oracle重新收集统计信息之后。已经逐渐被放弃,取而代之的是计划基线(PLAN BASELINE,在10g中并不完全可用)。存储提纲的使用:锁定下面这条语句的当前的执行计划(使以后执行这条语句时都用这个执行计划)HR@ prod> select last_name from em原创 2017-09-01 23:36:10 · 335 阅读 · 0 评论 -
DBMS_STATS的用法
收集表的统计信息(表大小写没关系,USER是一个SQL函数):HR@ prod> begin 2 dbms_stats.gather_table_stats 3 ( ownname => user , 4 tabname => 'EMPLOYEES' ) ; 5 end ; 6 / PL/SQL procedure successfully c原创 2017-09-01 23:20:32 · 1305 阅读 · 0 评论 -
Oracle 11g引用分区reference partition
解决的问题:如果父表是分区表,子表想要按照父表的方式进行分区。父表中被引用的主键列不一定要是分区键。 一个例子:下面是设计分区方案过程中的一个典型问题,并非所有表都需要根据其进行分区的列。假设要创建一个销售系统,该系统包括两个简单的表(sales 和customers)。 customers 表的创建如下所示: create table customers原创 2017-09-01 22:40:48 · 2274 阅读 · 0 评论 -
Oracle用数据泵转移SCHEMA(不同版本数据库)
在11g上创建测试数据SYS@ prod> create tablespace testtbs datafile size 10m ; Tablespace created. SYS@ prod> create user testuser default tablespace testtbs identified by testuser ; User created.原创 2017-08-23 23:29:45 · 1154 阅读 · 0 评论 -
用Transparent Gateway(TG)从SQL SERVER中提取数据到Oracle
测试环境:Oracle 数据库11g , Linux Redhat 5.4 , IP 192.168.56.180Sqlserver 数据库 2008 R2 ,Win7 , IP 192.168.56.222Gateway软件可以安装在Oracle数据库端,Sqlserver数据库端,或者一台单独的服务器上。本次安装在Sqlserver服务器上。 配置Sql Server登原创 2017-08-23 23:32:40 · 464 阅读 · 0 评论 -
Innodb的行级锁的特性
Innodb的行级锁依赖于索引,如果条件字段上没有索引,将会锁定全表。 SESSION1:mysql> create table t1 ( id int ) ;Query OK, 0 rows affected (0.09 sec) mysql> insert into t1 values(1 ), (2), ( 3) ;Query OK, 3 rows affecte原创 2017-08-24 00:20:01 · 247 阅读 · 0 评论 -
Oracle性能优化——SQL基线(SQL baseline)的载入与进化(11g中引入的基线)
参见 Oracle性能优化求生指南SYS@ prod> conn sh/shConnected.执行想要创建基线的语句,语句的执行计划将会被缓存SH@ prod> set autotrace onSH@ prod> select /*ghbaselines1*/ count(*) from customers join countries using ( country_id )原创 2017-09-01 23:46:27 · 963 阅读 · 0 评论 -
Oracle优化——基线自动捕捉(optimizer_capture_sql_plan_baselines,默认值为FALSE)
参见 Oracle性能优化求生指南。SYS@ prod> select count(*) from dba_sql_plan_baselines ; COUNT(*)---------- 2SYS@ prod> show parameter spfileNAME TYPE VALUE原创 2017-09-01 23:49:20 · 2133 阅读 · 0 评论 -
Oracle SQL高级编程——位图联结索引
参加《Oracle SQL高级编程》一个典型的数据仓库查询: 这个查询中sales 是事实表 , 一般很大。 Products , customers , channels是维度表 , 一般很小,可以有冗余。SH@ prod1> explain plan for 2 select sum( s.quantity_sold ) , sum( s.amount_sold ) from sal原创 2017-09-02 02:00:35 · 399 阅读 · 0 评论 -
Oracle SQL高级编程——Model子句全解析
参见 《Oracle SQL高级编程》。第一个例子,初步认识SH@ prod> col product format a30SH@ prod> col country format a10SH@ prod> col region format a10SH@ prod> col year format 9999SH@ prod> col week format 99SH@ prod> col原创 2017-09-02 01:52:17 · 1468 阅读 · 0 评论 -
Oracle SQL高级编程——子查询因子化全解析
参见《Oracle SQL高级编程》。概述子查询因子化就是ANSI中的公共表达式。 从11.2开始,子查询因子化开始支持递归。可以实现CONNECT BY的功能。标准的子查询因子化的例子这是一个非常复杂的查询,下面是不加因子化的版本。注意PIVOT的用法。select * from ( select /*+ gather_plan_statistics */ product ,原创 2017-09-02 01:31:33 · 615 阅读 · 0 评论 -
Oracle优化——星型联结转换(star_transformation_enabled)
参见 Oracle性能优化求生指南。另外请了解星型联结索引,此类问题的最佳实践。这是一个星型联结的例子,sales为事实表,其它为维度表。Where条件全部都作用在维度表上面。SH@ prod> select quantity_sold , amount_sold from sales s join products p using ( prod_id ) 2 join times原创 2017-09-02 00:16:42 · 1493 阅读 · 0 评论 -
Oracle优化——外联结的执行计划
外联结不要使用Oracle自有的方式在where条件中加(+),而要用ANSI的方式(… OUTER JOIN)。Oracle的方式不支持全外联结,而且存在诡异的BUG。左外连接与右外连接时,Oracle会把返回全部记录的表做为驱动表,哪怕这样是违背了ordered提示。可以应用所有的联结方法,效率也与内联结相仿。HR@ prod> select /*+ ordered */ first_n原创 2017-09-02 00:12:16 · 322 阅读 · 0 评论 -
外联结的ON条件与WHERE条件的区别
请注意以下联结的不同。employee_id = 200作为联结条件时,会有其余的行输出:HR@ prod> select /*+ ordered */ first_name , last_name , department_name 2 from employees e right outer join departments d on ( e.department_id = d.d原创 2017-09-02 00:10:14 · 357 阅读 · 0 评论 -
Oracle优化——三种联结方法
NESTED LOOPS条件:内表必须有索引,否则会造成NESTED TABLE SCAN。选取比例小。SORT MERGE条件:选取表中行的比例较大。内表没有索引。缺点:需要对表排序,内存开销非常大。HASH JOIN(先将一张表做成HASH表,再做NESTED LOOPS)条件:必须是等值连接。优势:同等条件下强于SORT MERGE。选取行的比例大时,优于NESTED LO原创 2017-09-02 00:03:11 · 390 阅读 · 0 评论 -
Mysql的READ COMMITTED隔离级别的问题
注意,经测试,此事务为READ COMMITED,并不是能读读取所有已提交的更改,只是能读取READ COMMITED隔离级别的事务产生的更改。REPEATABLE READ的事务产生的更改还是不可见的!!! mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED ;Query OK, 0 rows affected原创 2017-08-24 00:28:35 · 876 阅读 · 0 评论 -
WEBLOGIC连接RAC
最好的办法是在WEBLOGIC中配置GRIDLINK数据源。在应用中使用这个数据源。 创建GRIDLINK数据源的注意事项:主要在于配置ONS和FAN功能,一定要启动FAN,如果不启用就不是GRIDLINK数据源了,而是一般的数据源。没有HA和LB功能。配置ONS时可以不写wallet什么的,那个比较麻烦。ONS的IP和端口号可以从RAC主机的$GRID_HOME/opmn原创 2017-08-24 00:39:35 · 1272 阅读 · 0 评论 -
解决Weblogic域创建、启动、进入控制台慢问题
搭建Weblogic 11g和12c环境时发现,安装正常,以默认组件安装,但是创建域的时候特别慢,一般需要几分钟至10分钟,卡在“创建域安全信息”那一行,创建完成后,启动偶尔也很慢,也卡在域安全信息那一步,进入console,只出来标题,页面内容至少需要几分钟才能出来,只有第一次进入console会卡,以后速度正常,但是重启后依旧第一次卡。 到网上搜索,是linux下java生成随机数有b原创 2017-08-24 00:41:27 · 534 阅读 · 0 评论 -
脏读和READ UNCOMMITED隔离级别
读取到别的事务中尚未提交的数据,是绝对应该避免的。 一般来说脏读都是没意义的,都是坏事,在READ UNCOMMITED事务隔离级别下允许脏读。Oracle无论如何都不会出现脏读,不支持READ UNCOMMITED事务隔离级别。MySQL支持READ UNCOMMITED事务隔离级别(为了实现读的无阻塞):SESSION1:mysql> select @@tx_isola原创 2017-09-02 10:43:41 · 886 阅读 · 0 评论 -
Oracle用HASH簇表优化latch hit过低
部署测试环境以SYS用户在HR中建立与DBA_OBJECTS相同的表,重复插入得到100万行,并且添加一列ID,为这列添加连续的值,并建立唯一索引。 将AWR快照的产生时间设为10分钟。 在五个窗口并行执行:建立簇表所需信息HASHKEYS=distinct values SIZE=(avg_row_len*total_rows/HashKeys)*1.1 1.2可能更保险原创 2017-09-02 11:00:51 · 577 阅读 · 0 评论 -
Oracle的多版本控制小实验
本文将演示Oracle的多版本控制,以及串行化事务。在session1中,建一个表,插入两条测试数据SESSION1:SCOTT@ prod> create table t ( x int ) ;Table created.SCOTT@ prod> insert into t values(1) ;1 row created.SCOTT@ prod> select * from t ;原创 2017-09-03 00:46:05 · 397 阅读 · 0 评论 -
PLS-00653与管道化表函数的调用
Oracle 应用管道函数时出现PLS-00653:在 PL/SQL 定义域内不允许有聚集/表函数 创建一个表类型的 create or replace type str_list as table of varchar(300) ; 比如我们创建一个带pipelied 管道函数返回一张表或一个数据源数据的函数test5create or replace functi原创 2017-08-24 01:01:29 · 5385 阅读 · 0 评论 -
Oracle TX锁(事务锁)
也叫事务锁。每个事务只能有一个。 每个事务对应该一个TX锁,在该事务中修改或者select for update的每一行都会指向这个锁(数据块的结构中有相关的标志)。 如果一个事务想修改的某条记录已经被另一个事务锁住,那么这个事务会等待,如果再有事务会形成一个列表,等待的信息可以在v$lock里面查到。做一个实验(在TOM书的197页)准备实验数据:SCOTT@ prod>原创 2017-09-02 10:40:04 · 666 阅读 · 0 评论 -
Oracle 块头的事务槽
INITRANS 初始个数,默认为2,每个块会预分配2个事务槽。 MAXTRANS 事务槽的最大个数,为255(新版本已经不可设置了)。 事务槽的增加是需要空间的,如果块上空间不足,事务槽的数量将达不到255。 每个事务槽代表一个并发事务。探索小实验:SCOTT@ prod> create table t ( x int primary key , y varchar2(40原创 2017-09-02 10:18:26 · 561 阅读 · 0 评论 -
PIPELINED管道化(流水线)表函数
注意:表函数只能用SQL语句调用,而不能当作一个简单的PLSQL函数。 在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据(数据可以通过一个查询得到)。数据集合则可以通过复杂的操作得到。Oracle 9i 通过引入的管道化表函数使得集合可以一边生成一边返原创 2017-08-24 00:57:51 · 877 阅读 · 0 评论 -
NOT EXISTS不等于NOT IN,IN等于EXISTS
IN (select id from a ) 等价于EXISTS(select 1 from a where id = outer.id)。而NOT IN只在两个表的两个字段上面都不存在NULL值的时候才等价。当一个集合中存在NULL值的时候,NOT IN的结果是UNKNOW。判断一个NULL值在一个集合中是否存在,结果同样是UNKNOW。当mysql> select * from原创 2017-08-24 01:19:44 · 497 阅读 · 0 评论 -
Oracle 用hint来影响执行计划
全表扫描提示SYS@ prod> grant plustrace to hr ;Grant succeeded.SYS@ prod> conn hr/hrConnected.HR@ prod> set autotrace onHR@ prod> select /*+ full(employees) */ first_name from employees where employe原创 2017-09-01 23:29:10 · 273 阅读 · 0 评论 -
Oracle高级优化——侵入存储提纲(用PRIVATE OUTLINE)
参见 Oracle性能优化求生指南。如果某语句当前的执行计划并不令人满意,而且这条语句又不能加hint(因为在应用中不能编辑)。那么可以用这种方法,使执行计划稳定在一个与当前执行计划不同的执行计划上。SYS@ prod> conn hr/hrConnected. 为所要调整的语句用当前的执行计划(并不是想要的)创建一个outline。HR@ prod> create outline p原创 2017-09-01 23:40:49 · 285 阅读 · 0 评论 -
Oracle优化——固化的基线(作用类型于存储提纲)
参见 Oracle性能优化求生指南。当有固化的基线存在时,即使有导致执行计划发生改变的变化发生时,也不会产生新的基线。所以固化的基线不会进化。而且,当有固化基线时,优化器首先选择固化基线,不管它是不是最优化的。Oracle建议使用固化基线而不是存储提纲。SH@ prod> select /*ghbaselines1*/ count(*) from customers join count原创 2017-09-01 23:51:08 · 322 阅读 · 0 评论 -
Oracle优化——LIKE与索引(以%开头的LIKE会不走索引或走索引全扫描)
这样会走索引范围扫描,因为这个表达式有前导性。SH@ prod> set autotrace onSH@ prod> select max(cust_credit_limit) , count(*) from customers_ne where cust_last_name like 'Vaugh%' ;MAX(CUST_CREDIT_LIMIT) COUNT(*)--------原创 2017-09-01 23:58:25 · 6824 阅读 · 0 评论 -
Oracle优化——如何查看语句的准确的执行计划(explain plan可能不是真实的)
参见 Oracle性能优化求生指南。建虚拟索引HR@ prod> create index test_ix1 on employees4 ( employee_id ) nosegment;HR@ prod> alter session set "_use_nosegment_indexes" = true ;HR@ prod> set autotrace onHR@ prod> se原创 2017-09-02 00:23:00 · 819 阅读 · 0 评论 -
Oracle SQL高级编程——分析函数(窗口函数)全面讲解
参加《Oracle SQL高级编程》概述分析函数是以一定的方法在一个与当前行相关的结果子集中进行计算,也称为窗口函数。 一般结构为 Function(arg1 , arg2 ……) over(partition by clause order by clause windowing clause )Windowing clause : rows | range between start_ex原创 2017-09-02 02:16:36 · 1304 阅读 · 0 评论