[转]关于INSERT ALL和INSERT FIRST
一、无条件 INSERT ALL二、条件 INSERT ALL三、条件 INSERT FIRST[@more@]Insert…Select使用Insert Select实现同时向多个表插入记录 2007/06/25一、无条件 INSERT ALL---------------------------------------------------------------------------------------------INSERT ALLinsert_into_clause values_clause_1[insert_into_clause values_clause_2] ……Subquery;---------------------------------------------------------------------------------------------- 1、指定所有跟随着
ORALCE的异常处理
一、异常类型二、异常的抛出三、异常的传播四、EXCEPTION_INT编译指示[@more@]一、异常类型Exception Oracle Error SQLCODE Value ACCESS_INTO_NULL ORA-06530 -6530 CASE_NOT_FOUND ORA-06592 -6592 COLLECTION_IS_NULL ORA-06531 -6531 CURSOR_ALREADY_OPEN ORA-06511 -6511 DUP_VAL_ON_INDEX ORA-00001 -1 INVALID_CURSOR ORA-01001 -1001 INVALID_NUMBER ORA-01722 -1722 LOGIN_DENIED ORA-01017 -1017 NO_DATA_FOUND ORA-01403 +100 NOT_LOGGED_ON ORA-01012 -1012 PROGRAM_ERROR ORA-06501 -6501 ROWTYPE_MISMATCH ORA-06504 -6504
[整理]Oracle的数据池简介及用法
Oracle的数据池可分为default, keep, recycledb_cache_sizedb_keep_sizedb_recycle_size[@more@]一、default:标准的缓存池keep: 对于常驻内存的表使用,alter table .. storage(buffer_pool keep)recycle:对不需要放在内存中的表使用: storage(buffer_pool recycle)从本质上将,default, keep,recycle都使用LRU算法,本质上没有区别,就是看你放什么东西进去。default池不仅方用户数据,而且也包括数据字典的缓存。从9i开始,可以动态调整这几个内存区的大小alter system set db_keep_size=xxxM(show parameter cache_size可以看出全部
[转]对部分表空间作不完全恢复
对部分表空间作不完全恢复[@more@]在恢复用的机器上配置好与源数据库相同的目录,环境变量设好ORACLE_SID和ORACLE_HOME。拷贝主库的control file过来,将存储rman备份的nsf直接mount过来,也使用相同的目录,这样方便restore。run{--强制所有的数据文件offline,只是为了安全的目的。sql "alter database mount clone database";--为需要恢复的数据文件指定新的路径,也是安全考虑,防止在主库上恢复的时候,覆盖主库文件。--因为这里是在另外一个库上作恢复,所以可以设成和主库一样。--注意,undo和system是必须要恢复的,呵呵
[转]rman复制数据库
1,用rman做一个数据库的全备份2,新创建一个辅助的instance,将instance startup nomount3,根据数据库的rman备份来复制产生一个新库[@more@]下面是我做的测试例子,具体还是看看Oracle9i Recovery Manager User's GuideRelease 2 (9.2)Part Number A96566-01 6 RMAN Concepts II: Restore, Recovery, and DuplicationC:>rman target / auxiliary sys/test@test恢复管理器: 版本9.2.0.1.0 - ProductionCopyright (c) 1995, 2002, Oracle Corporation. All rights reserved.连接到目标数据库: WORLD (DBID=516573805)已连接到备用数据库: te
[整理]oracle中几个特殊的函数
1、全角转半角函数 TO_SINGLE_BYTE 2、数字转英文,利用to_char、to_date 3、sys_guid()[@more@]1、全角转半角函数 TO_SINGLE_BYTESQL> select TO_SINGLE_BYTE('oracle') from dual;TO_SINGLE_BYTE('ORACLE')------------------------------oracle2、数字转英文,利用to_char、to_dateSQL> select to_char(to_date('12345','J'),'Jsp') en from dual;en----------------------------------------Twelve Thousand Three Hundred Forty-Five不过有限制:一是长度的限制,二是不能转换带小数的SQL> select to_char(to_d
[转]隔离级别(isolation level)
ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only[@more@] l 隔离级别定义了事务与事务之间的隔离程度。l 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。l ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别:l 未提交读(read uncommitted)l 提交读(read committed)l 重复读(repeatable read)l 序列化(serializable)l 通过一些现象,可以反映出隔离级别的效果。这
[整理]锁和Latch
1、Latch和Lock的区别2、LATCH的产生过程3、如何查看是否存在latch争用4、检查latch free是不是主要的wait event5、DBA需要关注的latch有:6、锁概述6、死锁[@more@]Latch是Oracle提供的轻量级锁资源,他用于快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,他只工作在内存中,我们可以不大准确的说,内存中资源的锁叫latch,数据库对象(表,索引等)的锁叫Lock。比如数据缓存中的某个块要被读取,我们会获得这个块的latch,这个过程叫做pin,另外一个进程恰好要修改这个块,他也要pin这个块,此时他必须等待,当前一
RMAN总结
一、概述二、RMAN的自动配置三、用RMAN备份四、还原与恢复五、RMAN的管理六、恢复目录[@more@]本文章内容摘自别人的学习笔记一、概述1、备份对象RMAN 可以备份除了联机日志,pfile,密码文件之外的数据文件,控制文件,归档日志,spfile2、恢复目录用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库,利用恢复目录可以同时管理多个目标数据库,存储更多的备份信息,可以存储备份脚本。3、登录>rman>connect target user/userpass@sid;--要求用户有sysdba权限二、RMAN的自动配置1、配置备份策略保持分为两个保持策略,一个
[转]dbms_redefinition的使用
dbms_redefinition的使用[@more@]在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统。Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就无法完成了。而且,对于被大量DML语句访问的表,幸运的是,Oracle从9i版本开始提供了在线重定义表功能,通过调用DBMS_REDEFINITION包,可以在修改表结构的同时允许DML操作。在线重定义表具有以下功能:修改表的存储参数;可以将表转移到其他表空间;增加并行查询选项;增加或删除分区;重建表以减少碎
[转]ORACLE 分析函数(再论)
1.报表合计专用的Rollup函数2.对多级层次查询的start with.....connect by 3.更多报表/分析决策功能 3.1 分析功能的基本结构3.2 Row_Number 和 Rank, DENSE_Rank3.3 NTILE 把纪录平分成甲乙丙丁四等 3.4 辅助分析列和Windows Function4.SubQuery总结[@more@]1.报表合计专用的Rollup函数 销售报表广州 1月 2000元广州 2月 2500元广州 4500元深圳 1月 1000元深圳 2月 2000元深圳 3000元所有地区 7500元以往的查询SQL:Select area,month,sum(money) from SaleOrder group by area,month然后广州,深圳的合计和所有地区合计都需要在程序里自行
[转]ORACLE 分析函数详解
1. 自动汇总函数rollup,cube,2. rank 函数, rank,dense_rank,row_number3. lag,lead函数4. sum,avg,的移动增加,移动平均数5. ratio_to_report报表处理函数6. first,last取基数的分析函数[@more@]Oracle 分析函数使用介绍 分析函数是oracle816引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在只要一条简单的sql语句就可以实现了,而且在执行效率方面也有相当大的提高.下面我将针对分析函数做一些具体的说明.今天我
oracle 的 CONNECT BY 和START WITH
[@more@]在SELECT命令中使用CONNECT BY 和START WITH 子句可以查询表中的树形结构关系。其命令格式如下:SELECT …..CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 列名2}[START WITH];其中:CONNECT BY子句说明每行资料将是按层次顺序检索,并规定将表中的资料连入树形结构的关系中。0PRIORY运算符必须放置在连接关系的两列中的某一个的前面。对于节点间的父子关系,PRIOR去处符在一侧表示父节点,在别一侧表示子节点,从而确定查找权结构的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列运算式。START WIT
查询表与索引的物理大小
select segment_name, segment_type, bytesfrom dba_segmentswhere owner = 'SYS'4 and segment_name in (select index_namefrom dba_indexeswhere table_owner = 'SYS'7 and table_name = 'T'8 unionselect 'T' from dual);[@more@]代码: SYS@HUIYI>create table t2 (3 col01 date4 )5 /表已创建。SYS@HUIYI>insert into t values(sysdate);已创建 1 行。SYS@HUIYI>commit;提交完成。SYS@HUIYI>create index t_idx on t(col01);索引已创建。SYS@HUIYI>select segment_name, segment_type, bytes2 from dba_segments3 wher
[转]ORACLE数据库管理员应做的事
[@more@]ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控:(1). 每天对ORACLE数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,系统资源的使用情况进行检查,发现并解决问题。 (2). 每周对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。 (3). 每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对ORACLE数据库状态进行一次全面检查。 ====================★每天的工作★ ====================(1
ORACLE特殊包点滴
DBMS_Alert DBMS_DDL DBMS_Describe DBMS_BLob DBMS_OutputDBMS_Pipe DBMS_SQL DBMS_Utility DBMS_LOCK DBMS_Job[@more@]Oracle提供了几个包,它们可以用来完成很多任务,从内部进程通信到文件I/O,到在PL/SQL块中动态创建和执行SQL语句。所有这些包由SYS用户所拥有—当Oracle最初安装时两个用户中的一个,这些包中最重要的包括: DBMS_Alert 不用轮询就允许应用命名并发出警告条件信号的过程与函数 DBMS_DDL 允许获取PL/SQL程序内部一定数量的DDL语句的过程 dbms_metadata.get_ddl()获取创建对象的DDL语句
在ORACLE中发邮件
[@more@]可以利用utl_smtp包发邮件,以下是一个发送简单邮件的例子程序/****************************************************************************parameter: Rcpter in varchar2 接收者邮箱Mail_Content in Varchar2 邮件内容desc: ·发送邮件到指定邮箱·只能指定一个邮箱,如果需要发送到多个邮箱,需要另外的辅助程序****************************************************************************/CREATE OR REPLACE PROCEDURE sp_send_mail( rcpter IN VARCHAR2,mail_content IN VARCHAR2)ISconn utl_smtp.connection;--writ
快速复制表或者插入数据
[@more@]快速复制表可以指定Nologging选项如:Create table t1 nologgingas select * from t2;快速插入数据可以指定append提示,但是需要注意noarchivelog模式下,默认用了append就是nologging模式的。在archivelog下,需要把表设置程Nologging模式。如insert /*+ append */ into t1select * from t2注意:如果在9i环境中并设置了FORCE LOGGING,则以上操作是无效的,并不会加快,当然,可以通过如下语句设置为NO FORCE LOGGING。Alter database no force logging;是否开启了FORCE LOGGING,可以用如下语句查看SQL> select force_loggi
怎么样监控无用的索引
v$object_usage[@more@]Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引语法为:开始监控:alter index index_name monitoring usage;检查使用状态:select * from v$object_usage;停止监控:alter index index_name nomonitoring usage;当然,如果想监控整个用户下的索引,可以采用如下的脚本:set heading offset echo offset feedback offset pages 10000spool start_index_monitor.sqlSELECT 'alter index '||owner||'.'||index_name||' monitoring usage;'FROM dba_indexesWHERE owner =
怎么清理临时段
[@more@]可以使用如下办法1、 使用如下语句查看一下认谁在用临时段SELECT username,sid,serial#,sql_address,machine,program,tablespace,segtype, contentsFROM v$session se,v$sort_usage suWHERE se.saddr=su.session_addr2、 那些正在使用临时段的进程SQL>Alter system kill session 'sid,serial#';3、把TEMP表空间回缩一下SQL>Alter tablespace TEMP coalesce;还可以使用诊断事件1、 确定TEMP表空间的ts#SQL> select ts#, name FROM v $tablespace;TS# NAME-----------------------0 SYSYEM1 RBS2 USERS3* TEMP……2、