oracle数据库

知识博客专集

Oracle数据库删除表中重复记录的方法三则


  导读:oracle数据库在操作中,难免会有很多重复记录,这些重复记录都是些没有用的数据,所以就可以放心的删除,那么久介绍一些oracle数据库删除表中重复记录的常见方法。

  方法一:

  delete from tb_channel a where a.rowid in

  (select max(b.rowid) from tb_channle b

  where a.policyno=b.policyno and a.classcode=b.classcode);

  –这一办法在数据记录超过10万时一般都会变得很慢。

  方法二:

  –建立临时表,–清空原表,–插回原表,如下例:

  create table temp_emp as (select distinct * from employee);

  truncate table employee;

  insert into employee select * from temp_emp;

  –这一办法适用于较大的表的情况。因为是块操作,对应于大表效率会好很多

  方法三:

  –建立新表,–去重复放入,–删除原表,如下例:

  select distinct * into new_table from old_table

  order by 主 键

  drop table old_table

  exec sp_rename new_table,old_table;

  –这一办法适用于较大的表的情况。因为是块操作,对应于大表效率会好很多

  以上者三种方法,对表的数数额是不同的,所以可以根据具体的情况灵活应用,不论使用哪个,只要自己用着方便快捷就好。

Oracle数据库日常维护知识总结


首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表

就可以查出一些表,然后根据这些表就可以获得会话信息。

像这样就是 查询当前正在操作的会话:

一、查看数据库的连接情况

dba要定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能会需要dba手工进行清理。

以下的sql语句列出当前数据库建立的会话情况:

其中,

sid                           会话(session)的id号;

serial#                  会话的序列号,和sid一起用来唯一标识一个会话;

username            建立该会话的用户名;

program              这个会话是用什么工具连接到数据库的;

status                   当前这个会话的状态,active表示会话正在执行某些任务,inactive表示当前会话没有执行任何操作;

如果dba要手工断开某个会话,则执行:

注意,上例中sid为1到7(username列为空)的会话,是oracle的后台进程,不要对这些会话进行任何操作。

二、常用命令

1:oracle中怎样查看总共有哪些用户

2:查看oracle当前连接数

怎样查看oracle当前的连接数呢?只需要用下面的sql语句查询一下就可以了。

3:列出当前数据库建立的会话情况:

三、 oracle警告日志文件监控

oracle在运行过程中,会在警告日志文件(alert_sid.log)中记录数据库的一些运行情况:

 数据库的启动、关闭,启动时的非缺省参数;

 数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能
换的原因;

 对数据库进行的某些操作,如创建或删除表空间、增加数据文件;

 数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ora-600)

dba应该定期检查日志文件,根据日志中发现的问题及时进行处理

问题 处理

启动参数不对 检查初始化参数文件

因为检查点操作或归档操作没有完成造成重做日志不能切换 如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;

有人未经授权删除了表空间 检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限

出现坏块 检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建

表空间不够 增加数据文件到相应的表空间

出现ora-600 根据日志文件的内容查看相应的trc文件,如果是oracle的bug,要及时打上相应的补丁

四、 数据库表空间使用情况监控(字典管理表空间)

数据库运行了一段时间后,由于不断的在表空间上创建和删除对象,会在表空间上产生大量的碎片,dba应该及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或为表空间增加数据文件。

上面的sql列出了数据库中每个表空间的空闲块情况,如下所示:

其中,chunks列表示表空间中有多少可用的空闲块(每个空闲块是由一些连续的oracle数据块组成),如果这样的空闲块过多,比如平均到每个数据文件上超过了100个,那么该表空间的碎片状况就比较严重了,可以尝试用以下的sql命令进行表空间相邻碎片的接合:

然后再执行查看表空间碎片的sql语句,看表空间的碎片有没有减少。如果没有效果,并且表空间的碎片已经严重影响到了数据库的运行,则考虑对该表空间进行重建。

max_chunk列的结果是表空间上最大的可用块大小,如果该表空间上的对象所需分配的空间(next值)大于可用块的大小的话,就会提示ora-1652、ora-1653、ora-1654的错误信息,dba应该及时对表空间的空间进行扩充,以避免这些错误发生。

对表空间的扩充对表空间的数据文件大小进行扩展,或向表空间增加数据文件,具体操作见“存储管理”部份。

五、 控制文件的备份

在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成oracle数据库控制文件的变化,dba应及进行控制文件的备份,备份方法是:

执行sql语句:

这样,会在user_dump_dest(初始化参数文件中指定)目录下生成创建控制文件的sql命令。

六、 检查数据库文件的状态

dba要及时查看数据库中数据文件的状态(如被误删除),根据实际情况决定如何进行处理,检查数据文件的状态的sql如下:

如果数据文件的status列不是available,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。

七、 检查数据库定时作业的完成情况

如果数据库使用了oracle的job来完成一些定时作业,要对这些job的运行情况进行检查:

如果failures列是一个大于0的数的话,说明job运行失败,要进一步的检查。

八、 数据库坏块的处理

当oracle数据库出现坏块时,oracle会在警告日志文件(alert_sid.log)中记录坏块的信息:

其中,<afn>代表坏块所在数据文件的绝对文件号,<block>代表坏块是数据文件上的第几个数据块

出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。

1. 确定发生坏块的数据库对象

2. 决定修复方法

如果发生坏块的对象是一个索引,那么可以直接把索引drop掉后,再根据表里的记录进行重建;

如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表drop掉后重建;

如果有数据库的备份,则恢复数据库的方法来进行修复;

如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。

3. 用oracle提供的dbms_repair包标记出坏块

4. 使用create table as select命令将表中其它块上的记录保存到另一张表上

5. 用drop table命令删除有坏块的表

6. 用alter table rename命令恢复原来的表

7. 如果表上存在索引,则要重建表上的索引

九、 操作系统相关维护

dba要注意对操作系统的监控:

 文件系统的空间使用情况(df -k),必要时对oracle的警告日志及trc文件进行清理

 如果oracle提供网络服务,检查网络连接是否正常

 检查操作系统的资源使用情况是否正常

 检查数据库服务器有没有硬件故障,如磁盘、内存报错

简单说说Oracle分区(1)


一、简介

oracle的分区是一种处理超大型表、索引等的技术。分区是一种“分而治之”的技术,通过将大表和索引分成可以管理的小块,从而避免了对每个表作为一个大的、单独的对象进行管理,为大量数据提供了可伸缩的性能。分区通过将操作分配给更小的存储单元,减少了需要进行管理操作的时间,并通过增强的并行处理提高了性能,通过屏蔽故障数据的分区,还增加了可用性。

二、优缺点

优点:

增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

均衡i/o:可以把不同的分区映射到磁盘以平衡i/o,改善整个系统性能;

改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

缺点:

分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 oracle 提供了在线重定义表的功能。

三、分区方法

范围分区:

范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。

hash分区(散列分区):

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在i/o设备上进行散列分区,使得这些分区大小一致。

list分区(列表分区):

当你需要明确地控制如何将行映射到分区时,就使用列表分区方法。与范围分区和散列分区所不同,列表分区不支持多列分区。如果要将表按列分区,那么分区键就只能由表的一个单独的列组成,然而可以用范围分区或散列分区方法进行分区的所有的列,都可以用列表分区方法进行分区。

范围-散列分区(复合分区):

有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法(注意:先一定要进行范围分区)

范围-列表分区(复合分区):

范围和列表技术的组合,首先对表进行范围分区,然后用列表技术对每个范围分区再次分区。与组合范围-散列分区不同的是,每个子分区的所有内容表示数据的逻辑子集,由适当的范围和列表分区设置来描述。(注意:先一定要进行范围分区)

用jsp输出存在于oracle数据库Blob字段中的jpg图片


 在web-oa系统中,档案管理好象不可或缺。其中员工照片常常做成这样:用户通过浏览器上传员工相片,服务端程序接收图片文件,保存到数据库中的某个表的blob字段里(关于文件上传和blob字段的更新,请参考http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=11003和http://forum.hibernate.org.cn/viewtopic.php?t=254)。通过(jdbc/jdo)和(jsp/servlet),服务器再把保存在blob字段中的图片文件展现给用户。我这里给出一个关于展现的简单例子。

1.在数据库中建表,并且表要包含blob字段。
2.用plsql developer这种客户端数据库工具,修改某条记录的blob字段,存入一个jpg文件。
3.用jdbc或者hibernate获取某条记录的blob字段数据。(请参考参考资料2)
4.写一个jsp文件,来输出图片。如下所示

//////////////////////cwry_pic.jsp/////////////////////////
<%@page import=\”java.io.*\”%>
<%@page import=\”com.jagie.business.profile.*\” %>
<%@page import=\”java.sql.blob\”%>
<%
response.reset();
//这个设置很重要,否则客户端浏览器不能识别输出内容,导致弹出下载的对话框。
response.setcontenttype(\”image/jpeg\”);
servletoutputstream sos = response.getoutputstream();
//这里是用hibernate来根据id装载对象,你可以用别的方式如jdbc来组装对象,附文中有
//baseinfo这个javabean的示意性代码.
baseinfo bif= profileoperator.loadprofile(long.valueof(\”1\”));
//输出图片
if(bif!=null&&bif.getpic()!=null){
blob blob=(blob)bif.getpic();
inputstream pi = blob.getbinarystream();
int blobsize = (int)blob.length();
byte[] blobbytes = new byte[blobsize];
int bytesread = 0;
while ((bytesread = pi.read(blobbytes)) != -1) {
sos.write(blobbytes, 0, bytesread);
}
pi.close();
sos.flush();
}
%>

发布这个jsp到你的web服务器,再用浏览器访问这个jsp页面,你就可以看到保存在blob字段中的图片了。

附文:

///////////////////baseinfo.java示意性代码///////////////////////

package com.jagie.business.profile;
public class baseinfo{
//pk
private long id;
//相片
private java.sql.blob pic;
public long getid() {
return id;
}
public void setid(long id) {
this.id = id;
}

public java.sql.blob getpic() {
return pic;
}
public void setpic(java.sql.blob pic) {
this.pic = pic;
}
}

最后,希望这篇文章能对你有所启发,如有错误,敬请批评指正!

参考资料:
1:http://www-900.ibm.com/developerworks/cn/java/l-imgtxt/index.shtml
2:http://forum.hibernate.org.cn/viewtopic.php?t=254

浅谈Oracle数据库中的字符处理技巧总结


  在数据库开发与维护中,数据库管理员接触最多的数据类型就是字符类型了,包括字符串、日期类型的字符串等等。在oracle数据库中为了帮助数据库管理员能够以最快的方式处理这些字符类型的数据,提供了许多有用的函数或者工具。笔者今天就谈谈在oracle数据库中处理字符串的经验与心得。

  一、去掉尾部的空格字符

  有时候在查询或者进行其他处理的时候,需要把字符串尾部的空格字符去掉。如有时候应用软件设计的不合理,会把空格字符保存在数据库中。如在输入产品品号的时候,用户不小心,把“dt001”输成了“dt001 ”。如果应用程序在设计的时候,能够自动把尾部的空格去掉然后在保存到数据库中能够就万无一失了。但是不少的应用软件在开发的时候没有如此设计。这就给后续的处理带来了很多的麻烦。因为利用where语句来查找记录的时候,“dt001”(最后不带空格)与“dt001 ”(最后带一个空格)两个是不同的条件。如果想利用这个条件来进行数据更新、查询等等,就会遇到问题。为此在写相关的update或者select语句的时候,可能需要把后面的空格符号去掉。为此在oracle数据库中,有很多种解决方式。如数据库管理员可以使用ltrim函数来实现。这个函数的格式为ltrim[c1,c2]。其作用是去掉c1左边所包含的c2种的任何字符。当遇到不是c2种的字符串时结束,然后返回剩余的字符串。如果把c2字符串设置为空格符号(默认情况下就是空格),那么就可以把dt001后面的空格符号去掉了。

  二、在头部自动进行填充

  有时候可能数据库设计的时候,考虑的不够周到,导致某些字段不够大。在对数据库进行升级的时候,需要调整相关的字段。此时就可能需要对某个字段的头部进行填充,以达到数据一致性的要求。如现在有个erp系统,其需要用到一张产品信息的表,其中有一个产品编号字段。刚开始在设计产品编码的时候,设计的长度不够,如只设置了5位。随着企业产品记录的增多,需要对这个编码的内容进行扩展。如产品信息属于包装材料类的,需要在原来产品编号的头部加入一个字符b;如产品信息属于客供品的,则需要在原来产品编号的头部加入一个字符c;如产品信息属于辅助材料的,则在原来的产品编号前面加入一个字符f;等等。此时该如何实现这个需求呢?难道要一个个去修改吗?现在这手工修改的工作量比较大,而且容易出错,这个方法不可取。其实在oracle数据库系统中提供了一个单行字符函数,可以帮助数据库管理员与企业来解决这个问题。这个函数就是rpad函数。这个命令的格式为rpad(c1,n,c2)。这个函数的意识是在c1的右边填充字符c2,直到字符串的总长度满足n。默认情况下c2的值为空格,用户可以根据自己的需要设置这个值。如果c1的长度比n要大,则会截取c1右边的n个字符。现在如果要实现上面这个需求,则只需要设置函数rpad(产品编号,6,f)即可。由于原来的产品编号为5位,现在需要为辅助信息的产品编号前面加入一个字符f,修改后的总长度变为6位。不过在使用这个函数的话,往往需要利用where条件语句进行限制。

  现在这个函数还可以里用实现字符串的截取。如还是这个产品编号,其前面一位表示产品的种类。此时数据库管理员就可以利用rpad(产品编号,1)来截取产品编号的第一位字符(这里产品编号的长度比1要大,则会截取产品右边的1个字符,即产品类别标示码)。这在报表设计的时候也非常有用,有利于简化报表的显示。

  三、字符大小写的控制

  在做报表的时候,我们可能需要对字符串的现实格式进行控制,如大小写的显示格式。另外,在进行数据库移植的时候,可能以前的收入大小写不规范。数据库管理员需要采用一定的规则来规范移植后的数据库字符串书写规范。为了简化这些需求的实现方式,在oracle数据库中也提供了一些工具来解决这些问题。

  如以前在输入产品编号的时,可能大小写不区分。而在前台应用程序中也没有进行这方面的控制。现在用户希望所有的产品编号都为大写,需要把原先是小写的产品编号全部转换成大写。此时如果产品数量比较多的话,显然利用手工修改的方式会增加工作量。如果编写一个程序来实现的话,又太复杂,其实我们可以借鉴oracle数据库提供的字符串处理函数来实现。在单行字符函数集中,有一个函数upper,它的作用就是将全部字符串都改写为大写并返回。为此我们可以利用一个子查询或者借助视图的帮助,把所有产品编号中,如果含有小写字符的产品编号都更新为大写。如果原来就是大写的,就保持原样(而不是说原来大写的变小写,原来小写的变大写)。同理,既然小写可以变大写,那么大写也就可以变为小写。利用单行字符串函数lower,就可以把全部字符串改为小写输出(把大写字母改为小写,而小写字符保持不变)。

  另外一个大小写的控制原则比较复杂,如对于一些英文地址或者英文名字之类的字符串,需要首个字母大写,而其他字符小写。这个实现起来就有一定的难度。还好在oracle数据库中提供了一个现成的解决方法,即利用initchar函数来实现。这个函数的功能是将某个字段中每个单词的首字符转换为大小,其他字符都是小写的字符串。通常情况下,这个字段之间的单词可以利用空格、控制字符或则标点符号来表示。可见通过这个三个大小写字符串控制函数,可以优化字符串的显示格式,让其显示更加的规范。而结合update语句的话,还可以成批的在数据库中进行更新,让其保存的数据也符合规范化的要求。

  四、字符串中的复杂替换

  几年之后,杭州进行来一些行政区划的规格,如把下沙市改为了直属杭州管辖的下沙区。为此有一家企业的数据库管理人员就问笔者,能否把一些记录中的下沙市都改为下沙区。什么意思呢?也就是说,在数据库中可有含有如下记录“下沙市某某钢铁厂”、“杭州市某某服装厂”、“滨江区某某信息有限公司”等等。现在数据库管理员希望把含下沙市的内容都改为下沙区。这涉及到一些复杂字段的替换,实现起来具有一定的难度。数据库是结构化数据的结合体,不比word文档,可以利用查找替换功能来解决这个需求。那么在oracle数据库中该如何实现呢?在oracle数据库中就模拟实现了word文档中的查找替换功能。

  如在单行字符函数中有一个叫做replace的函数,就可以帮助数据库管理员实现这个需求。这个函数的格式为replace(c1,c2,c3)。他的含义就彪死后把c1中出现的c2都替换成c3,然后返回字符串。这是什么意思呢?其实就是跟word文档中的查找替换功能类似。从字符串c1种查找c2的内容,如果找到的话利用c3来代替。如果c3 的内容为空,则所有在字段中出现c2内容的字符都将被删除。那要实现上面的需求,就可以把这个函数的参数设置为replace(adress,下沙市,下沙区)。然后再利用upadate语句把这个函数返回的值赋值给地址字段即可。如此,在数据库地址字段中,出现下沙市的地方将全部被更新为下沙区。但是这个更改不会影响到其他的记录。如不会把杭州市也改为杭州区等等。

  为此,要实现一些复杂的字符替换作业,可以利用函数replace来完成。有时会,把replace函数与其他函数相结合,还可以实现一些更加复杂的内容。如在产品基本信息中,产品编号中可能包含了产品的分类信息,如psd001这个产品编号,第一个字符p表示成批,第二三个字符sd表示手动工具。如果自动工具的话就为pzd001。在生成报表的时候,如果利用这些字符来显示结果的话,显然报表的可读性并不是很好。此时数据库管理员可以先利用字符串截取函数或者利用上面所提到过的头部填充函数等等来截取相关的字符串,然后再利用现在这个查找替换函数,则可以把zd等字符转换成“自动工具”等代表含义的字符串,这将提高报表的可读性。可见,将replace替换函数与其他函数结合(c1、c2、c3参数都可以利用函数来实现)从而可以实现复杂的替换功能。

Oracle常见问题及解决方案


1、ora-12541:tns:没有监听器

    原因:没有启动监听器或者监听器损坏。如果是前者,使用命令net start oracleorahome81tnslistener(名字可能有出入)即可;如果是后者,则使用“net8 configuration assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路ok.在添加之前可能需要把所有的监听器先删除!)

    2、ora-12500:tns:监听程序无法启动专用服务器进程或ora-12560:tns:协议适配器错误

    原因:oracle的数据库服务没有启动。使用命令net start oracleserviceoradb(oradb为数据库名字)即可。

    3、数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:

    1)oradim -delete -sid oradb 删除数据库服务项

    2)oradim -new -sid oradb 新增数据库服务项

    注:这个过程中如果出错,就重启计算机!

    4、ora-12154:tns:能解析服务名

    原因:oracle的网络服务名没有正确配置。请使用“net8 configuration assistant”工具向导之“本地网络服务名配置”配置tns即可。如果仍没有解决,请继续向下看。

    5、ora-1034 :tns:oracle不可用

    原因:oracle的数据库服务正确启动,但是数据库没有打开!

    解决:

    使用命令:

    1)svrmgrl 启动服务管理器

    2)connect internal 以internal身份登陆

    3)startup 打开数据库

    6、ora-12560:tns:协议适配器错误(顽固性的)

    原因:未知。

    解决:必杀技——打开“windows任务管理器”,杀死oracle.exe及oradim.exe进程,书写自己的ora_startup.bat,执行之!

    「编辑推荐」

    在oracle的连接视图上进行数据更新操作

    给oracle进行健康体检

    使用环境变量配置oracle运行环境

DB2数据库中如何实现Oracle的某些功能


导读:在现实的应用中大家可能经常会遇到在db2数据库中如何实现oracle的某些功能﹐在此我简单地总结一下﹐实现某一功能可能会有很多种方法﹐在此就没有全部列出﹐欢迎大家继续﹐以便和大家共享﹐共同探讨﹐共同近步﹗(以下主要以oracle8i和db2 7.x为例)。

1.如何取一表前n笔记录的oracle和db2的写法

oracle 可以这样实现﹕

select * from user.bsempms where rownum<=n;

db2 可以这样实现﹕

select * from db2admin.bsempms fetch first n rows only;

另外也可以用 row_number() over() 去实现的;

2.如何取得当前日期的oracle和db2的写法

oracle 可以这样实现﹕

select sysdate from dual;

db2 可以这样实现﹕

select current timestamp from sysibm.sysdummy1;

3.如何连接字段的oracle和db2的写法

oracle 可以这样实现﹕

select emp_no||emp_nam from bsempms;

select concat(emp_no,emp_nam) from bsempms;

db2 可以这样实现﹕

select emp_no||emp_nam from db2admin.bsempms;

select emp_no concat emp_nam from db2admin.bsempms;

4.如何查询表的结构的oracle和db2的写法

oracle 可以这样实现﹕

select sysdate from dual;

db2 可以这样实现﹕

select current timestamp from sysibm.sysdummy1;

5.内连接inner join的oracle和db2的写法

oracle可以这样实现﹕ select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; db2 可以这样实现﹕ select * from db2admin.bsempms inner join db2admin.bsdptms on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no;

6.外连接的oracle和db2的写法(右外连接,左外连接,完全外连接,组合外连接)

oracle可以这样实现﹕

select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no( );

select a.* from bsempms a,bsdptms b wherea.dpt_no( )=b.dpt_no;

db2 可以这样实现﹕

select * from db2admin.bsempms right outer join db2admin.bsdptms

on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no;

select * from db2admin.bsempms left outer join db2admin.bsdptms

on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no;

select * from db2admin.bsempms full outer join db2admin.bsdptms

on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no;

  7.如何执行脚本sql文件的oracle和db2的写法

oracle 可以这样实现﹕

sql>@&path/filename.sql;

<>bdb2 可以这样实现﹕

db2 -tvf &path/filename.sql 文件中每行以 ; 结尾
 

上文中介绍的在db2数据库中实现oracle的某些功能的方法并不是很全面的,如果大家有更好的方法,可以拿出来与大家一起分享。

proxool连接池配置文件


java web中proxool连接池配置文件

1、下载proxool 地址:http://proxool.sourceforge.net
2、解压缩proxool-0.9.0rc2.zip,拷贝lib/proxool-0.9.0rc2.jar到web-info/lib 拷贝jdbc  驱动到web-info/lib
3、在web-info/config下建立文件:proxool.xml
<?xml version=\”1.0\” encoding=\”utf-8\”?>
<something-else-entirely>
  <proxool>
    <alias>develop</alias>
    <driver-url>jdbc:oracle:thin:@192.168.10.160:1521:orc1</driver-url>
    <driver-class>oracle.jdbc.driver.oracledriver</driver-class>
    <driver-properties>
      <property name=\”user\” value=\”test\”/>
      <property name=\”password\” value=\”testpass\”/>
    </driver-properties>
    <maximum-connection-count>10</maximum-connection-count>
    <house-keeping-test-sql>select current_date</house-keeping-test-sql>
  </proxool> 
</something-else-entirely>

这里,mydata是别名;
driver-url是数据库驱动的url,就是连接的url;
driver-class是驱动的类,就是数据库驱动;
driver-properties是驱动的属性,可以设置登陆数据库的用户名和密码。
maximum-connection-count是最大连接数。

4、在web.xml里新增如下:
<!– web服务器在启动的时候加载proxool驱动并且指明 proxool.xml的位置 –>
<servlet>
      <servlet-name>proxoolservletconfigurator</servlet-name>
    <servlet-class>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>
     <init-param>
       <param-name>xmlfile</param-name>
       <param-value>web-inf/config/proxool.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>

<!– proxool提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行 –>
<servlet>
    <servlet-name>admin</servlet-name>
      <servlet-class>org.logicalcobwebs.proxool.admin.servlet.adminservlet</servlet-class>
   </servlet>
   <servlet-mapping>
    <servlet-name>admin</servlet-name>
    <url-pattern>/admin</url-pattern>
   </servlet-mapping>

 5、在调用数据库连接代码:
       class.forname(\”org.logicalcobwebs.proxool.proxooldriver\”);
       connection conn = drivermanager.getconnection(\”proxool.develop\”);

            //develop就是刚才你proxool.xml 里,一个配置的别名
           // 一个proxool.xml 文件里可以配置多个 别名不同的数据库连接应用

 6、利用proxool监控工具查看数据库运行状态。地址:./admin

    以上配置是采用的xml文件方式,也可以采用properties配置方式:

proxool.alias=test
proxool.driver-class=oracle.jdbc.driver.oracledriver
proxool.driver-url=jdbc:oracle:thin:@192.168.10.160:1521:orcl
proxool.user=test
proxool.password=testpass
proxool.maximum-connection-count=20
proxool.prototype-count=4
proxool.house-keeping-test-sql=select sysdate from dual
proxool.verbose=true
proxool.statistics=10s,1m,1d
proxool.statistics-log-level=error

<servlet>
<servlet-name>servletconfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>
 
 <init-param>
   <param-name>propertyfile</param-name>
   <param-value>web-inf/config/proxool.properties</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>

在调用数据库连接代码
   class.forname(\”org.logicalcobwebs.proxool.proxooldriver\”);
   connection conn = drivermanager.getconnection(\”proxool.test\”);

还有一些配置属性:
maximum-connection-lifetime   最大连接生命周期  默认值:4小时
maximum-active-time:     最大活动时间   默认值:5分钟
maximum-connection-count   最大连接数    默认值:15个
minimum-connection-count   最小连接数    默认值:5个

在用admin调用的时候,可以查看这个web应用所有的连接数的状态,虽然这个插件可以把不活动的连接自动放到连接池里,但是如果连接数过多,而不及时kill的话,对网站的连接是有很大的影响的,建议还是手工kill。

Oracle 表空间操作


  create tablespace data01

  datafile \’/oracle/oradata/db/data01.dbf\’ size 500m

  uniform size 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k

  删除表空间

  drop tablespace data01 including contents and datafiles;

  修改表空间大小

  alter database datafile \’/path/naddate05.dbf\’ resize 100m

  移动表至另一表空间

  alter table move tablespace room1;

  一、建立表空间

  create tablespace data01

  datafile \’/oracle/oradata/db/data01.dbf\’ size 500m

  uniform size 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k

  二、建立undo表空间

  create undo tablespace undotbs02

  datafile \’/oracle/oradata/db/undotbs02.dbf\’ size 50m

  #注意:在open状态下某些时刻只能用一个undo表空间,如果要用新建的表空间,必须切换到该表空间:

  alter system set undo_tablespace=undotbs02;

  三、建立临时表空间

  create temporary tablespace temp_data

  tempfile \’/oracle/oradata/db/temp_data.dbf\’ size 50m

  四、改变表空间状态

  1.使表空间脱机

  alter tablespace game offline;

  如果是意外删除了数据文件,则必须带有recover选项

  alter tablespace game offline for recover;

  2.使表空间联机

  alter tablespace game online;

  3.使数据文件脱机

  alter database datafile 3 offline;

  4.使数据文件联机

  alter database datafile 3 online;

  5.使表空间只读

  alter tablespace game read only;

  6.使表空间可读写

  alter tablespace game read write;

  五、删除表空间

  drop tablespace data01 including contents and datafiles;

  六、扩展表空间

  首先查看表空间的名字和所属文件

  select tablespace_name, file_id, file_name,

  round(bytes/(1024*1024),0) total_space

  from dba_data_files

  order by tablespace_name;

  1.增加数据文件

  alter tablespace game

  add datafile \’/oracle/oradata/db/game02.dbf\’ size 1000m;

  2.手动增加数据文件尺寸

  alter database datafile \’/oracle/oradata/db/game.dbf\’

  resize 4000m;

  3.设定数据文件自动扩展

  alter database datafile \’/oracle/oradata/db/game.dbf\’

  autoextend on next 100m

  maxsize 10000m;

  4.设定后查看表空间信息

  select a.tablespace_name,a.bytes total,b.bytes used, c.bytes free,

  (b.bytes*100)/a.bytes \”% used\”,(c.bytes*100)/a.bytes \”% free\”

  from sys.sm&ts_avail a,sys.sm&ts_used b,sys.sm&ts_free c

  where a.tablespace_name=b.tablespace_name and a.tablespace_name=c.tablespace_name;

  5.oracle表空间的备份与恢复方法

  表空间备份与恢复主要针对于大型数据库中,某个表空间数据变化非常大,增长速度非常快的情况。表空间的备份实现脚本:

  run {

  allocate channel d1 type disk;

  backup tablespace \”test\”,\”users\” format ’d:\\backup\\tb_%d_%s_%p_%t’;

  release channel d1;

  }

  恢复时,如果用户是要恢复被删除的表空间中的表或视图,或者是使用者用drop tablespace正常命令删除了表空间,此时控制文件中记录的数据库结构也跟着做了改变,此时只能用不完全恢复,让数据库恢复到以前的一个时间点或scn。先恢复控制文件,再恢复表空间。

  shutdown abort;

  startup nomount;

  run {

  allocate channel d1 type disk;

  restore controlfile from ‘d:\\backup\\ctl_test_0_1_6555’;

  release channel d1 ;

  alter database open; //要为打开状态

  set until time \”to_date(’08/08/2007 10:50:00’,’mm/dd/yyyy hh24:mi:ss’)\”;

  sql ’alter tablespace test, users offline immediate’;

  allocate channel d1 type disk;

  restore tablespace test, users;

  recover tablespace test, users;

  release channel d1;

Oracle发布移动客户端和相关框架


 甲骨文近日发布了一移动客户端和相关框架,以帮助开发人员快速构建工业移动设备的java应用程序。

  甲骨文的fusion产品管理高级主管duncan mills表示,oracle应用开发框架(adf)移动客户端应用程序开发提供了可以在不同的移动平台部署而不必要为每个特定平台编写代码。

  甲骨文2009年10月首次宣布手机客户端软件,并在2010年4月发布了一个技术预览版。

  客户端是oracle应用开发框架的延伸,包括用于查看已经安装的应用程序、用来储存本地数据的小型数据库和java运行时引擎,以及已经安装的不需要java的设备的浏览器。

  客户端框架使用一个基于jsf(java server faces)标准的用户界面。它还提供了一个预先设定的方式来同步数据与后端服务器,使开发人员可以指定哪些数据可以与数据库或其他数据源同步。

  客户端已与oracle框架融合,但也可以与其他web服务使用。客户端可让 设备脱机使用数据,一旦连接回网络又可以传输数据。

  客户端还提供了一些工具来收集和传输设备本身所产生的数据 比如摄像头,gps读卡器,条码扫描仪或其他数据生成组件的数据,mills说。

  目前,该手机客户端只适用于windows mobilever5和ver 6,和rim的blackberry设备。该框架还不支持iphone,android设备或windows phone7设备。 oracle的开发团队正考虑扩大该框架来支持这些设备,但还没有具体的时间表,mills说。他指出,工业设备制造商仍然在他们的产品中安装旧版本的windows mobile,这些操作系统仍然在行业广泛使用。

  甲骨文通过仁科本身的移动应用管理来部署上周公布的移动客户端。

  移动客户机的成本为每用户5美元,也可以按每台设备来计算价格。 oracle还提供了一个免费的jdeveloper ide(集成开发环境)扩展,帮助使用此客户端来设计应用程序。



Powered By wordpress Copyright oracle数据库 © 2009-2012 版权所有