浅谈oracle复合数据类型 (1)
--本文档可以直接拷贝运行。/*oracle复合数据类型PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。*//*一、记录类型类似C语言中的结构,有两种定义方式:显式定义和隐式定义。*/create table test(id varchar2(20),mc varchar2(60));insert into test values('111','11111');insert into test values('222','22222');insert into test values('333','33333');insert into test values('444','44444');insert into test values('555','55555');insert into test values('666','66666');commit;/*1.1、显
关于os认证和口令文件认证
前言发现有很多人提问数据库身份认证方面的问题,基此就oracle的身份认证做个简要解析,希望这篇文档对遇到类似问题的朋友有所裨益。文中错误之处请大家指正,不足之处请大家补充!环境windows2000+sp4,oracle9.201oracle软件以oracle帐户安装一、sysdba的权限sysdba(sysoper和normal)是登录数据库的身份,与角色(dba、resource)、对象权限及系统权限有所区别,登录身份表明了可对数据库的整体进行哪些操作,sysdba有些类似unix下的root帐户。sysdba的权限或可对数据库进行的操作:startup,shutdownalter database open|mountalter
EXTRACT函数
select systimestamp,extract(hour from systimestamp) +extract(timezone_hour from systimestamp) hourfrom dual;[@more@]
9i新特性之Flashback Query的应用(2)
用DBMS_FLASHBACK包 DBMS_FLASHBACK 包提供了以下几个函数: ENABLE_AT_TIME:设置当前SESSION 的闪回查询时间ENABLE_AT_SYSTEM_CHANGE_NUMBER:设置当前SESSION的闪回查询SCNGET_SYSTEM_CHANGE_NUMBER:取得当前数据库的SCN DISABLE:关闭当前SESSION 的闪回查询 如:SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER------------------------ 8053651当将一个SESSION 设置为闪回查询模式之后,后续的查询都会基于那个时间点或者SCN 的数据库状态,如果SESSION 结
9i新特性之Flashback Query的应用(1)
在9i之前,如果出现DML的误操作,只能通过备份来完成基于时间点的恢复,9i给提供了一个新的特性Flashback Query,我们可以应用此特性,可以很方便的实现恢复。但是要注意的是,Flashback Query 仅仅是一个查询的机制,不会真正的UNDO任何数据。 1. 什么是Flashback Query?利用Oracle 多版本读一致的特性通过undo 来提供所需的前镜像中的数据。通过这个功能,可以看到历史数据,甚至用历史数据来修复误操作引起的错误。可以通过指定时间或者SCN 来检索需要的数据。{Uses Oracle's multiversion read-consistency capabilities to
oracle和sqlserver互访(3)
3.SQLSERVER訪問ORACLE環境:windowsxp + sqlserver2000 + Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production IP:192.168.1.221代码:// A. 添加ODBC,OdbcName=DB,OracleSid=DB// B. 執行sp_addlinkedserver 'LIORA', 'Oracle', 'MSDAORA', 'DB'GOEXEC sp_addlinkedsrvlogin @rmtsrvname='LIORA',@useself='false',@locallogin='sa',@rmtuser='SYSTEM',@rmtpassword='MANAGER'select top 10 topic,info from LIORA..SYSTEM.HELPtopic info
oracle和sqlserver互访(2)
2.通過"透明网關"方式聯接代码:// A. 安裝透明网關,在安裝時選擇自定義安裝,安裝TRANSPARENT GATEWAY FOR SQLSERVER 組件,安裝成功後會產生oracle_homeora90tg4msql目錄!// B. 配置TNSNAMES.ORA,路徑:ORACLE_HOMENETWORKADMIN,這一步應該在ORACLEDB(192.168.1.52)上配置!TG4MSQL = # tnsName (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.221)(PORT = 1521)) # 网關IP ) (CONNECT_DATA = (SID = tg4msql ) #SID,要和監听器裡的SID一致!
oracle和sqlserver互访(1)
要求:從Oracle中能取SqlServer的數据環境:OracleDb: Linux + Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production IP:192.168.1.52(TOPPROD)MSQLDB: Windows2000 + SqlServer2000 IP:192.168.1.50(ERPSQL),測試用戶:sa/pass 測試數据表:EK.ACPTA网 關: WindowsXp + Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production IP:192.168.1.221(S0504027),因為暫在測試階段,所以网關裝在我用的机器,网關可以裝在MSQLDB上1.通過ODBC通用方式聯接代码:// A. 安裝HS部件// 默認情況下HS部件是安裝的,查詢視圖 SYS.HS_BASE_C
oracle安装patch
1、已经在9201创建了数据库set ORACLE_SID=..C:> sqlplus /NOLOGSQL> CONNECT sys/口令 AS SYSDBA (conn / as sysdba)SQL> DROP PUBLIC synonym XMLCONCAT;SQL> DROP FUNCTION XMLCONCAT;停止所有的Oracle开头的服务请同时停止“Distributed Transaction Coordinator”服务要安装的产品为:Oracle Universal Installer 10.1.0.2.0 路径要选择你的9201目录 ora92,d:oracle要安装的产品为:Oracle 9iR2 Patch Set 9.2.0.5.0 路径要选择你的9201目录 ora92,d:oracle请确认Oracle实例和Listener服务已经启动C:> set ORACLE_SID
oracle的比率(2)
2、数据库缓冲区(database buffer cache)命中率:SELECT 1 - (phy.value / (cur.value + con.value)) "CACHE HIT RATIO" FROM v$sysstat cur, v$sysstat con, v$sysstat phyWHERE cur.name = 'db block gets' AND con.name = 'consistent gets' AND phy.name = 'physical reads';反映在内存中获得数据块的百分比,要求大于90%,如果比率过小,考虑增加DB_BLOCK_BUFFERS/SGA_TARGET/SGA_MAX_SIZE。db block gets:对当前块的访问块数,consistent gets:对读一致性块的访问块数,physical reads:从物理文件读取得块数,db block gets+cons
使用SQL_TRACE进行数据库诊断(2)
1. 在全局设置在参数文件中增加: event="10046 trace name context forever,level 12" 此设置对所有用户的所有进程生效、包括后台进程.2. 对当前session设置通过alter session的方式修改,需要alter session的系统权限: SQL> alter session set events '10046 trace name context forever';Session altered.SQL> alter session set events '10046 trace name context forever, level 8';Session altered.SQL> alter session set events '10046 trace name context off';Session altered. 3. 对其他用户session
使用SQL_TRACE进行数据库诊断(1)
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。本文就SQL_TRACE的使用作简单探讨,并通过具体案例对sql_trace的使用进行说明.一、 基础介绍(a) SQL_TRACE说明SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。1. 在全局启用在参数文件(pfile/spfile)中指定:sql_trace =true在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使
AUTONOMOUS TRANSACTION(自治事务)的介绍
在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题.,比如想在执行当前一个由多个DML组成的transaction(事务)时,为每一步DML记录一些信息到跟踪表中,由于事务的原子性,这些跟踪信息的提交将决定于主事务的commit或rollback. 这样一来写程序的难度就增大了, 程序员不得不把这些跟踪信息记录到类似数组的结构中,然后在主事务结束后把它们存入跟踪表.哎,真是麻烦!有没有一个简单的方法解决类似问题呢?ORACLE8i的AUTONOMOUS TRANSACTION(自治事务,以下AT)是一个很好的回答。AT 是由主事务(以下MT)调用但是独立于它的事务。在
checkpoint是什么
html,body { border: 0px; }checkpoint是数据库的一个内部事件,这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATA BUFFER CACHE)中的脏数据块写出到数据文件中。checkpoint的作用是什么?checkpoint主要2个作用:1、保证数据库的一致性,这是指将脏数据写出到硬盘,保证内存和硬盘上的数据是一样的;2、缩短实例恢复的时间,实例恢复要把实例异常关闭前没有写出到硬盘的脏数据通过日志进行恢复。如果脏块过多,实例恢复的时间也会很长,检查点的发生可以减少脏块的数量,从而提高实例恢复的时间。checkpoint就像word的自动保存
Oracle表分区
自从oracle8i 开始可以把一个表分割为多个小的部分,这样可以对oracle的性能优化带来很大的好处~例如:改善表的查询性能,更加容易管理表数据,备份和恢复操作更方便在oracle 中分区表 分为好几种的(范围分区,散列分区,子分区,列表分区,索引分区)下面我们来慢慢介绍现在我们来建立一个[范围分区]create table RangeTable( id int primary key, name varchar(20), grade int)partition by rang(grade)( partition part1 values less then(50) tablespace Part1_tb, partition part2 values less then(MAXVALUE) tablespace Part2_tb);如果grad
oracle不同版本之间exp/imp规则
moving data between different releases of the Oracle database server, the following basic rules apply:The Import utility and the database to which data is being imported (the target database) must be the same version. The version of the Export utility must be equal to the lowest version of the source or target database. For example, to create an export file for an import into a higher release database, use a version of the Export utility that is equal to the source database. Conversely, to cr
ORACLE ROWID
在8i以前rowid由file#+block#+row#组成,占用6个bytes的空间,10 bit 的 file# ,22 bit 的 block# ,16 bit 的 row#。其中oracle 的dba(data block address)是32 bits的,包括10 bit 的 file# 和 22 bit 的block#。由于不存在0编号文件,oracle中的文件最大数量2^10-1=1023而datafile能达到的最大size就是2^22*db_block_size如果db_block_size为4k的datafile max size就是16G如果db_block_size为8k的datafile max size就是32G从oracle 8开始rowid变成了extend rowid,由data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间,32b
start with ... connect by
start with ... connect by用法简介 sql有向图问题期待新解决方案 /*******************************************************************************通过START WITH . . . CONNECT BY . . .子句来实现SQL的层次查询.自从Oracle 9i开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到当前行内容以“path”或者层次元素列表的形式显示出来。自从Oracle 10g 中,还有其他更多关于层次查询的新特性 。例如,有的时候用户更关心的是每个层次分支中等级最低的内容。那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子。如
stored procedure 收集session wait 信息
OWI --用 stored procedure 收集session wait 信息包括对象如下:event_seq: 序列,用于唯一标识每一条记录dc_event_data: 表,用于存储session wait信息dc_collect:存储过程,用于定期收集各个session wait信息,并保存到dc_event_data表中。根据建议,频率可保持在一分钟一次,而不影响系统性能。dc_analyze: stored procedure. 用于分析和具体化表dc_event_data中的记录--想法来源于<<Oracle Wait Interface A Practical Guide to Performance Diagnostics & Tuning>>--------------------------------------------SEQ
oracle的比率(1)
1、shared_pool命中率:1.1、库缓存(Library cache)GETS:parse locks gets,在Library cache申请获得该命名空间对象的锁的次数,gets级别高于pins,必须先获得锁,然后执行pins。GETHITS:在库缓存中成功获得对象锁的次数。GETHITRATIO:反映在cache中成功获得对象锁的成功率,如果在cache中找不到所要的对象,就会读硬盘上的文件并缓存到cache中,按照LRU算法换出一些最近最久不用的数据页,如果对象失效reload,这个值应该大于85%。这个比率低主要和应用程序相关。object has been locked exclusively or the application is infrequently referen