初级行转列示例
表aid,name,val1,aaa,302,aaa,403,aaa,604,bbb,405,bbb,606,bbb,80得到结果name,val1,val2,val3aaa,30,40,60bbb,40,60,80Oracle中:select Name,sum(decode(tmp.rn,1,val)) val1,sum(decode(tmp.rn,2,val)) val2,sum(decode(tmp.rn,3,val)) val3 from (Select a.*,row_number() over(Partition By Name Order By val) rn From a)tmp Group By NameMSSQL中:select name,max(case rc when '1' then val end) val1,max(case rc when '2' then val end) val2,max(case rc when '3' then val end) val3 from (select id,name,(select count(0)
动态游标的操作~~~
--方法1declarecursor tmp_cur(tmp_num NUMBER) IS select * from tables where part_num=tmpnum;beginfor emp_record in tmp_cur(123) loop..............end loop;end;--方法2declarebeginfor emp_record in (select * from tables where part_num=123) loop..............end loop;end;[@more@]
Oracle中重建表的在线重定义
例如对myuser用户下表userbase执行表分区重建操作! 1--验证是否可以执行SQL> execute dbms_redefinition.can_redef_table ('myuser','userbase');2--创建中间表按照需求创建一个新表userbase_a,其它_a表表结构已经建立。3--开始重定义SQL> execute dbms_redefinition.start_redef_table ('myuser','userbase','userbase_a');4--完成重定义SQL> execute dbms_redefinition.finish_redef_table ('myuser','userbase','userbase_a'); 在执行过程中还可以执行下面两条语句来保持源码与中转表数据统一. --保持同步表SQL&
oracle字符集转换分析工具
html,body { border: 0px; }一、the Character Set Scanner Utility的作用 分析字符数据转换到新的字符集的可行性和可能存在的问题并给出一个评估报告,用户可依据该报告确定如何进行字符集转换。 该工具主要测试在转换到新的字符集时数据的字符编码会作什么改变;是否能成功转换到新的字符集;转换后的数据是否适合当前列的大小。只检测CHAR, VARCHAR2, LONG, CLOB, NCHAR, NVARCHAR2, and NCLOB数据类型的列,不测试LONG, CLOB, and NCLOB数据类型的大小。 二、工具的准备 在使用前必须执行一个SQ
ORACLE SQL概述(2)
Oracle扩展PL/SQL简介 1、 PL/SQL概述。 PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套了快。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上相关的说明和语句组合在一起,其形式为: DECLARE ---说明 BEGIN ---语句序列 EXCEPTION ---例外处理程序 END; 它有以下优点: l 支持SQL; l 生产率高; l 性能好; l 可称植性; l 与ORACLE集成. 2、 PL/SQL体系结构 PL/SQ
ORACLE SQL概述(1)
SQL是一种面向数据库的通用数据处理语言规范,能完成以下几类功能:提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全控制,数据库完整性及数据保护控制。 数据库对象包括表、视图、索引、同义词、簇、触发器、函数、过程、包、数据库链、快照等(表空间、回滚段、角色、用户)。数据库通过对表的操作来管理存储在其中的数据。 1) SQL*PLUS界面: 登录:输入SQLPLUS回车;输入正确的ORACLE用户名并回车;输入用户口令并回车,显示提示符:SQL> 退出:输入EXIT即可。 2)命令的编辑与运行
一个参数 nls_date_language
一个参数 nls_date_language alter session set nls_date_language='simplified chinese';会话已更改。idle>select next_day ( to_date ('2006-10-10','yyyy-mm-dd'),'TUESDAY') NEXT_DAY FROM DUAL;select next_day ( to_date ('2006-10-10','yyyy-mm-dd'),'TUESDAY') NEXT_DAY FROM DUAL*ERROR 位于第 1 行: ORA-01846: 周中的日无效 idle>select next_day ( to_date ('2006-10-10','yyyy-mm-dd'),'星期二') NEXT_DAY FROM DUAL;NEXT_DAY ---------- 17-10月-06 idle>alter session set nls_date_language='american';会话已更
ORACLE备份策略(4)
第六章. 常见误区1、使用EXP/IMP备份EXP/IMP不是一个良好的备份工具,在以后的发展之中,ORACLE对EXP/IMP用于备份的支持会越来越低。ORACLE只是把EXP/IMP当作一个好的工具而不是备份工具,在对于大型数据库,如TB级数据库或数据仓库,EXP/IMP肯定会力不从心。2、在应用程序中备份数据库在论坛上,有很多这样的要求,“我怎么在程序中备份与恢复数据库?”。首先说,这个并不是不可以实现,但是实现的过程会很复杂而且意外会很多。就我的感觉,提出这样问题的人,首先一点就是对ORACLE或DBA的不了解,如果ORACLE可以这么轻松的实现备份与恢
ORACLE备份策略(3)
第五章. 定制恰当的备份策略5.1 定制正确的策略正确的备份策略不仅能保证数据库服务器的24*7的高性能的运行,还能保证备份与恢复的快速性与可靠性。我们将以RMAN的多级增量备份作为一个备份策略的例子来讨论。采用多级备份就是为了减少每天备份所需要的时间,而又保证系统有良好的恢复性。恢复时间与备份时间要有一个权衡。比如只要进行一个数据库的全备份,然后就只备份归档也可以保证能把数据库恢复到最新的状态,但是这样的恢复时间将是不可容忍的。多级备份也正是 为了解决这种问题,以下就是一个多级备份的例子:每半年做一个数据库的
ORACLE备份策略(2)
第四章. ORACLE备份的分类简单的按照备份进行的方式,可以分为逻辑备份、冷备份(脱机备份)、热备份(联机备份),其实冷备份与热备份又可以合称为物理备份按照备份的工具,可以分为EXP/IMP备份、OS拷贝、RMAN、第三方工具,如VERITAS以下我们将从多个角度来说明以上的各种备份方式4.1 EXP/IMP逻辑备份导入/导出是ORACLE幸存的最古老的两个命令行工具了,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳
ORACLE备份策略(1)
第一章. 概要1、了解什么是备份2、了解备份的重要性3、理解数据库的两种运行方式4、理解不同的备份方式及其区别5、了解正确的备份策略及其好处第二章. 了解备份的重要性可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片、主板电路、内存、电源等任何一项不能正常工作,都会导致计算机系统不能正常工作。当然,这些损坏可以修复,不会导致应用和数据的损坏。但是,如果计算机的硬盘损坏,将会导致数据丢失,此时必须用备
Oracle多粒度封锁机制研究1
html,body { border: 0px; }1 引言—数据库锁的基本概念 为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。 排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。 共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求
Oracle多粒度封锁机制研究2
html,body { border: 0px; }1.1.1v$locked_object视图 v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下: 字段名称 类型 说明 XIDUSN NUMBER 回滚段号; XIDSLOT NUMBER 槽号; XIDSQN NUMBER 序列号; OBJECT_ID NUMBER 被锁对象标识; SESSION_ID NUMBER 持有锁的会话(SESSION)标识; ORACLE_USERNAME VARCHAR2(30) 持有该锁的用户的Oracle用户名; OS
常见的oraclet等待事件
html,body { border: 0px; } 1、db file sequential read 调整SQL,增加buffer cache,加快磁盘读写速度 2、log file sync 减少事务提交,将redo文件存放于高速硬盘 3、db file scattered read FTS-调整SQL,增加索引,加快磁盘读写速度 4、latch free – need p1,p2,p3 5、enqueue – need p1,p2,p3 and SQL 6、SQL*Net more data from client 减少数据传输,网络优化 7、direct path read 排序问题,调整IO或者减少排序 8、direct path write 直接路径访问问题,加快磁盘读写速度 9、buffer busy waits – need p1,p2,p3 and S
v$lock视图相关介绍
html,body { border: 0px; }v$lock视图的各个列及其说明:ADDR RAW(4) 在内存中锁定的对象的地址KADDR RAW(4) 在内存中锁的地址SID NUMBER 保持或申请锁的会话的标识号TYPE VARCHAR2(2) 锁的类型。TX=行锁或事务锁;TM=表锁或DML锁;UL=PL/SQL用户锁ID1 NUMBER 锁的第1标识号。如果锁的类型是TM,该值表示将要被锁定的对象的标识号;如果锁的类型是TX,该值表示撤销段号码的十进制值ID2 NUMBER 锁的第2标识号。如果锁的类型是TM,该值为0;如果锁的类型是TX,该值表示交换次数LMODE NUMBER 会话保持的锁的模式。0=None;1=
WINDOWS平台上扩展SGA
html,body { border: 0px; }针对32bit的Windows。Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的。1. 如果机器的内存在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)进行扩展,如果机器内存大于4GB就只能使用AWE进行扩展了。AWE支持以下的Windows操作系统:Windows 2000 Datacenter ServerWindows 2000 Advanced ServerWindows 2003 Datacenter Edition(32bit)Window
oracle嵌套表
/*以前在做报表的时候会经常用到oracle的内存表(其实是oracle嵌套表的部分功能,这里在下边介绍)来提高性能。利用oracle内存表进行临时运算通过ref cursor来返回我们想要的结果集。open cur for select * from table(fun_to_table_rb1_1(cur_qc,cur_qm));关于这部分的一些测试可以参看:http://www.itpub.net/showthread.php?s=2642ceb4225ba625b06fa33ee7c44a12&threadid=617298最近把oracle嵌套表的其他功能仔细看了看并做了个简单整理。oracle提供两种使用嵌套表的方法:1. PL/SQL代码中作为扩展PL/SQL语言;(这部分内容就是上边所
number(p,s)
number(p,s)p:1~38s:-84~127 p>0,对s分2种情况分析:有效数位:从左边第一个不为0的数算起1. s>0精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。2. s<0精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|(有效数位:从左边第一个不为0的数算起)Value Datatype Stored Value 123.2564 NUMBER 123.2564 1234.9876 NUMBER(6,2) 1234.99 12345.12345 NUMBER(6,2) Error 1234.9876 NUMBER(6) 1235 12345.345 NUMBER(5,-2) 12300 1234567 NUMBER(5,-2) 12346
循环取值并处理示例
Declaretmp_char Varchar2(500) := 'aaa|bbb|ccc|ddd|';tmp_sql Varchar(500);tmp_str Varchar(50);len_end Number(10);len_begin Number(10) := 0; Begindbms_output.put_line('tmp_char:' || tmp_char);While instr(tmp_char,'|')>0Looplen_end := instr(tmp_char,'|') ;tmp_str := substr(tmp_char,0,len_end-1);tmp_sql := 'update xxx set aa=bb where cc like ('''||tmp_str||''')';--Execute IMMEDIATE tmp_sql;--Commit;len_begin := len_end+1;tmp_char := substr(tmp_char,len_begin);dbms_output.put_line('t
动态选择表示例
DeclareCursor mycur Is Select table_name From All_Tables Where owner='USER';vtable Varchar(50);vsql Varchar(500);Beginfor emp_record in mycur Loopvtable := emp_record.table_name;vsql := 'Select * From '||vtable;--Execute IMMEDIATE vsql;dbms_output.put_line(vsql);End Loop;End;[@more@]