您好,欢迎来到帮我找美食网。
搜索
您的当前位置:首页程序需要解决的问题

程序需要解决的问题

来源:帮我找美食网
 1、数据库表空间offline恢复online. 2、扩大数据库表空间。 3、 扩大临时表空间。 4、window.open()的使用。 5、完全删除数据库。 6、时间相差8小时。 7、创建实体化视图。 8、删除实体化视图。 9、更新数据库数据。 10、多数据库联合查询。 11、表联合查询。

12、LEFT OUTER JOIN的使用 13、重建临时表空间。 14、添加执行计划。

15、安装cvsnt版本管理软件。 16、oracle常用sql函数。 17、建立临时表语法。 18、复制数据到表中。

19、查找数据库是否存在某表某触发器。 20、url中文乱码。 21、多表可更新视图。 22、修改数据库最大连接数 23、删除表数据,释放表空间

24、编写 Oracle存储过程解析XML,并把数据持久化 ora-01033

23、oracle内存调整。

24、优化数据库大幅度提高Oracle的性能 25、server2003不能启动apach Tomcat 26、五分钟统计数据 27、ORACLE中取消unique 28、session失效时间

29、Oracle定时执行计划sql 30、oracle查询合并字符串 31、oracle添加删除字段

32、oracle触发器插入,更新,删除数据两表同步 连接池连不上远程数据库

通过JOB增加分区

删除表分区 alter table its_car201103 drop partition p20110804;

数据库存在就不插入,不存在就插入数据

insert into its_image (CLXXBH,CTHPTZZP,CWHPTZZP,QJZP,CTZP,CWZP,YLZP1,YLZP2) select '320201000000000005000005003279','','','','','','','' from dual where not exists (select * from its_image where clxxbh='320201000000000005000005003279'); 完全删除oracle数据库。

实现方法:

1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。

2、 开始->程序->Oracle - OraHome81->Oracle Installation Products-> Universal Installer

卸装所有Oracle产品,但Universal Installer本身不能被删除

3、 运行regedit,选择HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE,按del键删除这个入口。

4、 运行regedit,选择HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services,滚动

这个列表,删除所有Oracle入口。

5、 运行regedi,

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application, 删除所有Oracle入口。

6、 开始->设置->控制面板->系统->高级->环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定

7、 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标 8、 删除\\Program Files\\Oracle目录

9、 重新启动计算机,重起后才能完全删除Oracle所在目录

10、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\\Oracle,删除这个入 口目录及所有子目录,并从Windows 2000目录(一般为C:\\WINNT)下删除以下文 件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 11、 WIN.INI文件中若有[ORACLE]的标记段,删除该段 12、 如有必要,删除所有Oracle相关的ODBC的DSN 13、 到事件查看器中,删除Oracle相关的日志

说明:

如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装, 安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了

1、

2、过往车辆翻页显示过慢。(ftp下載問題)

3、过往车辆加一个excle按钮。(下载jxl.jar放到C:\\Program Files\\Java\\jre1.6.0\\lib\\ext) 放到C:\\Tomcat 6.0\\lib

导入jxl.jar

Classpath中加入%CATALINA_HOME%\\lib\\jxl.jar; tomcat

4、设备状态加一个管理日志。

5、信息查询加一个时间项,去掉采集机关。(已解决) 6、是否可以查询外地车

7、加入一个入口选择,那些报警信息自动布控,那些手动布控。 8、过往车辆查询,会有个别的照片显示太大。参考11 9、摄像机不识别或空拍要报警。

10、过往车辆查询加一个号牌种类为空的查询。(已解决)

11、gwcpw.jsp中的267行

最新要解决的

1、最新违法 图片不显示

2、最新报警车辆 (缺少布控号牌、布控车型)(已解决,Bjxx.java和AlarmCarManager.java加入两项) 3、报警车辆切入点(同上)在com\\\\hy\\\\sqldeploy\\\\bjxx_nopar.sql里面修改sql 加入两项。

4、超速报警查询 删除(已经解决,修改jsp) 5、设备状态查看(按设备编号排序),异常红色标记。(sbzt.xml,sbzt_watcher.jsp) 6、轨迹跟踪(查看详情失败)。

7、范围管理(修正、增加改成多选。删除不可用(取消这个))。 8、帮助无图片。(可能是机器上没有安装office)。 9、技术支持(已修改参看jszch.jsp)。 10、图片下载(给一个服务器的链接)。图片下载需要ant.jar放到C:\\Tomcat 6.0\\lib;C:\\Program Files\\Java\\jre1.6.0\\lib\\ext下,然后导入。 11、Excel生成(在服务器生成,给一个链接)。

12、修改一下页面的纵坐标(height=1300px修改成700px) 13、已经登陆的用户再次登陆提示已经登录,不能重复登陆。 14、Tomcat启动时间相差8小时。

解决方法在环境变量添加:JAVA_OPTS -Duser.timezone=GMT+08 在C:\\Tomcat 6.0\\bin的catalina.bat中92行加上 set JAVA_OPTS = -Duser.timezone=GMT+08

创建实体化视图

create materialized view ITS_BJCLHS TABLESPACE ITS_TAB BUILD IMMEDIATE refresh force on demand

start with to_date('16-09-2009 12:00:00', 'dd-mm-yyyy hh24:mi:ss') next TRUNC(SYSDATE,'hh')+1/24 as

SELECT DISTINCT * from ITS_car ./此处的select语句是视图的表。

删除实体化视图

删除实体化视图日志

 drop materialized view log on table1;

删除实体化视图

 drop materialized view mv_table1;  -- 获取上月的开始时间和结束时间

 select

to_char(to_date(to_char(add_months(sysdate,-1),'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;

 select

to_char(to_date(to_char(sysdate,'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;

 -- 获取前一天的开始时间和结束时间

 select

to_char(to_date(to_char(sysdate-1,'yyyy-mm-dd'),'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss') from dual;

 select

to_char(to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss') from dual;

 -- 获取上一个小时的开始时间和结束时间  select

to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')-1),'yyyy-mm-dd hh24') from dual;

 select

to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')),'yyyy-mm-dd hh24') from dual;

window.open()的使用。 一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三、示例: 脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。 请对照。 上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。 四、各项参数 其中yes/no也可使用1/0;pixel value为具体的数值,单位象素。 参数 | 取值范围 | 说明 | | alwaysLowered | yes/no | 指定窗口隐藏在所有窗口之后 alwaysRaised | yes/no | 指定窗口悬浮在所有窗口之上 depended | yes/no | 是否和父窗口同时关闭 directories | yes/no | Nav2和3的目录栏是否可见 height | pixel value | 窗口高度 hotkeys | yes/no | 在没菜单栏的窗口中设安全退出热键 innerHeight | pixel value | 窗口中文档的像素高度 innerWidth | pixel value | 窗口中文档的像素宽度 location | yes/no | 位置栏是否可见 menubar | yes/no | 菜单栏是否可见 outerHeight | pixel value | 设定窗口(包括装饰边框)的像素高度 outerWidth | pixel value | 设定窗口(包括装饰边框)的像素宽度 resizable | yes/no | 窗口大小是否可调整 screenX | pixel value | 窗口距屏幕左边界的像素长度 screenY | pixel value | 窗口距屏幕上边界的像素长度 scrollbars | yes/no | 窗口是否可有滚动栏 titlebar | yes/no | 窗口题目栏是否可见 toolbar | yes/no | 窗口工具栏是否可见 Width | pixel value | 窗口的像素宽度 z-look | yes/no | 窗口被激活后是否浮在其它窗口之上 window.showModalDialog使用手册 基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 使用方法: vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures]) 参数说明: sURL-- 必选参数,类型:字符串。用来指定对话框要显示的文档的URL。 vArguments-- 可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。 sFeatures-- 可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号―;‖隔开。 1.dialogHeight :对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。 2.dialogWidth: 对话框宽度。 3.dialogLeft: 离屏幕左的距离。 4.dialogTop: 离屏幕上的距离。 5.center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。 6.help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。 7.resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。 8.status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。 9.scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。 下面几个属性是用在HTA中的,在一般的网页中一般不使用。 10.dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。 11.edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。 12.unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。 参数传递: 1.要想对话框传递参数,是通过vArguments来进行传递的。类型不,对于字符串类型,最大为4096个字符。也可以传递对象,例如: ------------------------------- parent.htm modal.htm ------------------------------- 2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如: ------------------------------ parent.htm modal.htm 币种定义部分 var psAddStr=\"ProcessID=\"+ProcessID+\"&AddFlag=\"+isAddFlag+\"&BZBH=\"+vsBZBH+\"&BZMC=\"+vsBZMC+\"&BZFH=\"+vsBZFH+\"&JD=\"+vsJD; var Result=window.showModalDialog(\"addSave.asp?\"+psAddStr,'',\"dialogHeight:250px;dialogWidth:250px;status:no;\"); 八、数据库空间offline恢复成 online

alter tablespace ITS_TAB offline temporary; alter tablespace ITS_TAB online;

alter database datafile 'D:\\oracle\\oradata\\ITS_TAB_01.DBF' online;

再重起数据库,发现ITS_TAB表空间是online状态

然后手工修改数据字典ts$和seg$。再重起数据库,发现test表空间是online状态,数据文件

D:\\oracle\\oradata\\ITS_TAB_01.DBF也是online状态,但是从v$datafile的enabled字

段中可以看出该数据文件是disabled的,正常应该为read write的。从dba_data_files视图中可以发现e:1.dbf和e:2.dbf的字节数均为0.该表空间虽然是online的,但是select * from test;就会报出错误,说数据文件D:\\oracle\\oradata\\ITS_TAB_01.DBF此时不可读取。

由于v$datafile和dbA_data_files主要是从x$ktfbhc中获取信息的。查询x$ktfbhc表,发现

D:\\oracle\\oradata\\ITS_TAB_01.DBF文件的ktfbhccval字段为1。也就是说在表空间

offline下来后,即使alter database datafile online也不会修改此字段。如果是数据文件offline下来的话,将数据文件online起来是会修改的。

研究进行到此,停顿了一段时间,一直把焦点放在如何修改x$ktfbhc表上面。但是这张基表,oracle不让修改。

后来我打开logmnr,通过logmnr发现oracle在执行完上面那些步骤后还执行了一下\"alter tablespace online的语句。这条语句应该触发了一个内部触发器修改x$ktfbhc表。 我试着再扫执行一遍alter tablespace online。结果依然一样。

我再试着执行了一下alter tablespace offline。结果当然是报错,然后执行alter tablespace online.当然这条语句也是报错。

但是令我惊奇的是,此时数据文件的状态变为read write了。 这时test表空间中的表格也能访问了。

至此修改数据字典将表空间online成功了!

九、扩大数据库表空间。

Alter tablespace ITS_TAB add 'D:/oracle/oradata/ITS_TAB_02.DBF' size 5000m; 扩大临时表空间。

ALTER database TEMPFILE 'D:\\ORACLE\\ORADATA\\ORCL\\TEMP01.DBF' resize 1000M ; 修改临时文件大小

select 'ALTER database TEMPFILE ' || file_name || ' resize 100M ;' from dba_temp_files

where tablespace_name = 'ONLYDWTEMP';

ALTER database TEMPFILE '/oradata/ONLYDWTEMP06.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP07.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP08.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP09.dbf' resize 100M ;

datafile

ALTER database TEMPFILE '/oradata/ONLYDWTEMP10.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP01.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP02.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP03.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP04.dbf' resize 100M ; ALTER database TEMPFILE '/oradata/ONLYDWTEMP05.dbf' resize 100M ; SQL> ALTER database TEMPFILE '/oradata/ONLYDWTEMP09.dbf' resize 100M ;

ALTER database TEMPFILE '/oradata/ONLYDWTEMP09.dbf' resize 100M ORA-03297: file contains used data beyond requested RESIZE value 创建新的临时表空间

SQL> create temporary tablespace '/oradata/TEMP1_01.dbf' size 100M; Tablespace created

SQL> create temporary tablespace '/oradata/TEMP2_01.dbf' size 100M; Tablespace created

将当前临时表空间指定为新的临时表空间

SQL> alter database default temporary tablespace TEMP1; Database altered 删除旧的临时表空间

SQL> drop tablespace ONLYDWTEMP including contents and datafiles; Tablespace dropped 更新数据库里面的数据。

update its_car t set

t.tplj=replace(.tplj,'ftp://user:user@192.168.0.1/D','ftp://user:

TEMP2

TEMPFILE

TEMP1

TEMPFILE

user@192.168.0.111/D');

前一个是被替换的,后一个是替换以后的。

update its_bjcl set wflx='99',wfms='误报警' where length(cfbh)<15; 更新cfbh长度小于15 的字段

多数据库联合查询。

首先在D:\\oracle\\ora92\\network\\admin下TNSNAMES.ORA中配置连接。 create public database link orcl1 connect to its identified by its using 'ORCLXH'; //创建dblink orcl1为link名,ORCLXH为SID

create public database link orcl2 connect to its identified by its using 'ORCL'; //创建dblink orcl2为link名,ORCL为SID //两个服务器数据库的联合查询语句。

//查询时只要在表名后加@orcl1(dblink名)。

(select sjbm from its_car@orcl1 a where ( a.JGSJ >= to_date('2009-05-12 10:16:55','yyyy-mm-dd hh24:mi:ss') )) union (select sjbm from its_car@orcl2 b where ( b.JGSJ >= to_date('2009-05-12 10:16:05','yyyy-mm-dd hh24:mi:ss') ) and

( b.JGSJ <= to_date('2009-05-12 10:16:55','yyyy-mm-dd hh24:mi:ss') ) ) order by sjbm desc

一、dblink创建 (两种方式): 1、已经配置本地服务 create public database link toBeJing connect to scott identified by tiger using 'BEJING' 数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.可以用NET8 EASY CONFIG或者

直接修改TNSNAMES.ORA里定义. 2、直接建立链接 create database link toBeJing connect to scott identified by tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = BJORCL) ) )'; host=数据库的ip地址,service_name=数据库的ssid。 其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。 注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。 1.先创建PUBLIC DATABASE LINK,不用指定用户和密码 scott@TEST>conn system/test Connected. system@TEST>CREATE PUBLIC DATABASE LINK orcl USING 'BEJING'; Database

link created. 2.再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE

LINK名称相同),指定用户和密码 system@TEST>conn scott/tiger Connected. scott@TEST>CREATE DATABASE LINK orcl CONNECT TO scott IDENTIFIED BY tiger; Database link created. 实际上相当于: CREATE DATABASE LINK orcl USING 'BEJING' CONNECT TO scott IDENTIFIED BY tiger; db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。 connected user,简单来说,连接方数据库以connected的用户来连接远程数据库。 fixed user,简单来说,连接方数据库以fixed(指定的)用户来连接远程数据库。 看看创建db link语法,你对这两种类型就比较清楚了。 创建connected user的db link语法: create databas link foo connect to scott identified by tiger using 'BEJING' ; 创建fixed user的db link语法: create databas link foo using 'BEJING' ; db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。 所以,oracle模仿域名搞出一个global_name,global_name=db_name+db_domain。有了global_name,就可以实现数据库命名的全局唯一。例:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM 数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME; 如果global_names=true,那么db link的命名要和远程数据库的global_name相同;如果global_names=false,那么你可以随便命名db link。 查询global_names是true还是false,在pl/sql中的命令窗口(不是sql窗口)执行:show parameter global_names 二、dblink查询: 查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令: SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK'; 三、dblink删除: DROP PUBLIC DATABASE LINK toBeJing 四、dblink使用: SELECT……FROM表名@数据库链接名; 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成―表名@dblink服务器‖而已。 例:查询北京数据库中emp表数据 select * from emp@toBeJing; 五、同义词配合: 第四点中from emp@toBeJing可以创建同义词来替代: CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; 如:create synonym bj_scott_emp for emp@toBeJing; 于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@toBeJing DB LINK是于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。 //删除数据库链接

drop public database link orcl2 //orcl2为link名 表联合查询。

(select dddm,sbbh,sjbm from its_car@orcl2 a where ( a.JGSJ >= to_date('2009-05-12 10:16:55','yyyy-mm-dd hh24:mi:ss') ) ) union (select dddm,sbbh,sjbm from its_car@orcl3 b where ( b.JGSJ >= to_date('2009-05-01 10:16:35','yyyy-mm-dd hh24:mi:ss') ) and ( b.JGSJ <= to_date('2009-05-01 10:16:55','yyyy-mm-dd hh24:mi:ss') ) ) order by sjbm desc

Union查询出两个具有相同表结构的不重复的数据。

Union all 查询出两个具有相同表结构的所有数据。(可以重复) LEFT OUTER JOIN的使用。

select a.dddm dddm,a.ddms ddms,a.cdbh cdbh,a.num num,b.num num1 from (select dddm,ddms,cdbh,count(*) num from its_car where ( JGSJ >= to_date(?,'yyyy-mm-dd hh24:mi:ss') ) AND ( JGSJ <= to_date(?,'yyyy-mm-dd hh24:mi:ss') ) group by dddm,ddms,cdbh) a LEFT OUTER JOIN (select dddm,ddms,cdbh,count(*) num from its_car

where hphm is null and ( JGSJ >= to_date(?,'yyyy-mm-dd hh24:mi:ss') ) AND ( JGSJ <= to_date(?,'yyyy-mm-dd hh24:mi:ss') )

group by dddm,ddms,cdbh) b on a.dddm =b.dddm and a.ddms=b.ddms and a.cdbh=b.cdbh order by a.dddm,a.cdbh 相同的表不同的检索条件的左链接。

minus 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。

重建临时表空间。 1.创建中转临时表空间

create temporary tablespace TEMP1 TEMPFILE

'E:ORACLEORADATAORCL9temp02.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

2.改变缺省临时表空间 为刚刚创建的新临时表空间temp1

alter database default temporary tablespace temp1; 3.删除原来临时表空间

drop tablespace temp including contents and datafiles; 4.重新创建临时表空间

create temporary tablespace TEMP TEMPFILE

'E:ORACLEORADATAORCL9temp01.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

5.重置缺省临时表空间为新建的temp表空间

alter database default temporary tablespace temp; 6.删除中转用临时表空间

drop tablespace temp1 including contents and datafiles; 7.如果有必要,那么重新指定用户表空间为重建的临时表空间 alter user arbor temporary tablespace temp;

1.create temporary tablespace temp_new tempfile 'XXXXXX' SIZE 1000M AUTOEXTEND OFF ;

2.根据需要,你可以继续添加临时文件

alter tablespace temp_new add tempfile 'xxxxx' size 1000m autoextend off ;

3.更改默认临时表空间

alter database default temporary tablespace temp_new; 4.检查

select username,temporary_tablespace from dba_users; 5.删除

drop tablespace temp ; 添加执行计划。

Restart.bat文件(重新启动Tomcat 6.0) Net stop Tomcat 6.0 Net start Tomcat 6.0

安装cvsnt版本管理软件。 cvsnt-2.5.03.2382.msi 安装完成以后

单击开始-->程序-->CVSNT-->CVSNT Control Panel

打开

确定CVSNT CVSNT Lock都是Start

选择Repository configuration 点Add

建一个CVS文件夹

选OK

点Server Settings

选择用户名wll为用户名。

点Compatibility Options进行设置。

点Advanced

选上全部,除了All users are read(这个设置选上会导致不能上传文件)

设置完成后在eclipse里面设置。 打开eclipse 点菜

Window-->Customize Perspective

勾上CVS 在eclispe中

选中已有项目,右键-->Team-->Share Project

Next

Host: 要连接的主机名或者IP Repository Path :CVS路径 User : 用户名

Password :用户密码 NEXT

Oracle 常用SQL函数

Oracle的SQL函数分为单行函数和多行函数。单行函数只对单条记录有效,多行函数对多条记录有效。 A O[.r0s.h l/L@Xe6VN | S

单行函数包括,字符、数字、日期、转换和普通函数。 S\\}M'q AY;F

H's1Gn m'aE j t0\\3p};f1R!TO

字符函数举例:iv5PE3D&Bs6I •

!qUF8I k;\\7U

全小写 LOWER('SQL Course') sql course*f7\\Kh:t • |2_bX l

全大写 UPPER('SQL Course') SQL COURSE

•首字母大写 INITCAP('SQL Course') Sql Course拼接 CONCAT('Good', 'String') GoodString 取子串 SUBSTR('String',1,3) Str 求长度 LENGTH('String') 6

数字函数举例:ROUND -- 对数值进行四舍五入操作TRUNC -- 截断。注意截断和舍入的位数,可以是负数。&n2M2Uw/~,l;S,B

ROUND (45.923, 2) 45.92 JD)d\"HW ROUND (45.923, 0) 46 ROUND (45.923, -1) 50 TRUNC (45.923, 2) 45.92 TRUNC (45.923) 45 Ek;D*lM TRUNC (45.923, -1) 40

MOD -- 返回两数相除的余数8O!aN*X oh{S MOD(1600, 300) -- 100 }/E P:A8u ^

日期函数:

•Oracle将日期按照内部格式将日期存成以下七个字节–世纪、年、月、日、时、分、秒。•在Oracle中日期缺省的显示格式为:DD - MON - YY 。•可以使用系统变量 SYSDATE 获取系统时间•。查看 SYSDATE时,可以使用虚拟表DUAL。agF$H+GK!Q/T0s2SVK

举例:求两个日期间有多少个月份 MONTHS_BETWEEN('01-SEP-95','11-JAN-94') 1.9774194.j|%j:c9} la-K^

在日期上加指定的月数 '11-JUL-94'2M9mEr/`\\&^9Z*M3W

下一个星期几是什么时候 '08-SEP-95''v K ~3dr&@ '30-SEP-95' 01-JUN-95

ROUND('25-MAY-95 01-JAN-95

01-MAY-958YS fh+]2M

TRUNC('25-MAY-95

','YEAR')

ADD_MONTHS('11-JAN-94',6)

NEXT_DAY('01-SEP-95','FRIDAY')

某月最后一天 LAST_DAY('01-SEP-95')

把日期四舍五入到月份 ROUND('25-MAY-95','MONTH')

','YEAR')

把日期截断到月份 TRUNC('25-MAY-95 ','MONTH')

01-JAN-95+c8A\"C8m4z TQ 转换函数Rohj6x

TO_CHAR 将数字或日期转换为字符串 TO_NUMBER 将字符串转换成数字

TO_DATE 将字符串转换成日期T4f!A g$b3`3rD 在转换函数中会使用格式串 TO_CHAR(date, 'fmt')O.[Y6Kr;l

格式串包含在''中, 大小写敏感, 可以是任意有效的日期格式格式串: YYYY 表示完整的四位数字年f4M*zN9]fw;M`1O YEAR 表示英文拼写的年

MM 表示两位数字月)u#F3W4q6`z,| MONTH 表示英文全拼的年C!u;z$hu DY 表示三位缩写的星期 DAY 表示英文全拼的星期 一些特殊用法: 时间格式

HH24:MI:SS AM 15:45:32 PM-nw(qU!dob^ 在格式串中加入字符串

DD \" of \" MONTH 12 of OCTOBER 用后缀拼出整个日期!I A*] h$bQI-d~cr ddspth fourteenth B8n X'A/i@ TO_CHAR(number, 'fmt')#G}$ZK^,pW\\ 使用此函数将数字转换成数字 9 表示数字D-B#n:z.n~?w5\\ 0 强制为0;zKzF/k[ ^4Irf&b $ 设置美元符号

L 使用当前字符集的货币符号 C}/b0Q4I@-q*E+mh . 小数点(`F0QN}\"gbc R:O/} , 千位分隔符

可以使用TO_NUMBER将字符串转换成数字可以使用TO_DATE将字符串转换成格式日期 TO_DATE ('10 September 1992', 'dd Month YYYY')Jk ^5x*G h$_8fw,On)n

P;[W-Ej$]F9|o s

使用格式串TO_DATE(char [, 'fmt']) &{c*@\"M(v-a)^8R6X 普通函数NULL值处理函数

NVL (expr1, expr2)

如果expr1为NULL,返回expr2NVL2 (expr1, expr2, expr3)4p0NxUyY m M'~

如果expr1为非空,则返回expr2,如果expr1为NULL,则返回expr3NULLIF (expr1, expr2)[|D

s*G

如果expr1=expr2,返回NULL,否则返回expr1 M d0]N^;`,Z$b COALESCE (expr1, expr2, ..., exprn)

返回表达式列表中的第一个非空表达式 /pP ] P&^

条件表达式,用case表达式或decode实现条件逻辑CASE表达式f.S v&C\"f-B

CASE expr WHEN comparison_expr1 THEN return_expr1g5m)q C5U&|A [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr] END decode函数DECODE(col|expression, search1, result1 9dd:N'v9V'WO [, search2,result2,...,]Z9NhE(?#~jO2w\"Y[ [, default]) 分组函数:AVG (DISTINCT|ALL|n)S2]P)nUZaP:i COUNT (DISTINCT|ALL|expr|*)|kn,Qu1yx@ b;A MAX (DISTINCT|ALL|expr) MIN (DISTINCT|ALL|expr) STDDEV (DISTINCT|ALL|n)fy&e{%JL@ SUM (DISTINCT|ALL|n)#_9A'{ Y;M#qP VARIANCE (DISTINCT|ALL|n) 数据库索引 数据库建立索引可以提高查询速度,但是不能使用模糊查询(like) 1. 建立临时表语法

A.ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法 CREATE GLOBAL TEMPORARY TABLE TABLE_NAME -----(COUMNS …)

ON COMMIT DELETE ROWS;

当前session发出commit/rollback命令,则该事务周期发生的所有数据自动被Oracle删除(Oracle truncate table)。但不影响任何其他session的数据。

B.ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法 CREATE GLOBAL TEMPORARY TABLE TABLE_NAME -----(COUMNS …)

ON COMMIT PRESERVE ROWS;

当前session结束(用户正常退出 / 用户不正常退出 / Oracle实例崩溃),Oracle对这个会话的中发生的数据进行删除(Oracle truncate table)。但不影响任何其他session的数据。

复制数据到表中 insert into illgel select * from its_illegal where rownum<11; 查找数据库是否已经存在某个表某触发器。 select count(*) from tab where tname = '表名'; SELECT COUNT(*) CNT FROM USER_TRIGGERS T WHERE T.TRIGGER_NAME = '触发器名'; //中文乱码 String fxmc = new String(request.getParameter(\"fxmc\").getBytes(\"ISO-8859-1\"),\"gbk\"); 多表可更新视图(替代触发器)

在数据库设计中,时常看到很多人为了方便,将一个报表或是其他直接设为数据库表,我认为规范性不是很好,若是多个报表,则会带来数据冗余等问题,今天在查看视图的时候发现个好东西——多表可更新视图 何为可更新视图?(引用)

可更改的视图就是可以使用DML操作的视图; 若视图不包括如下部分:

1、union、union all、minus等集合操作符; 2、聚集函数(如sum、avg等);

3、group by、connect by或start with子句; 4、distinct操作符

5、连接(若连接之后得到一个key perserve table除外)

则为可更改的视图,否则为不可更改的视图。

当视图中涉及多个表时,为不可更改视图,此时若想要通过视图更新表,则使用instead of 替代触发器实现DML操作 关于替代触发器可查看转自

多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。

可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i以上版本,单表视图如果没有设定With Read Only,则该视图是可以更新的,对视图的操作将直接写入的数据表中。

那么,如果视图的数据源是多张数据表,而多表视图如果实现可更新视图,则可以大大提高编码的效率。

1 前言

多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。

可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i以上版本,单表视图如果没有设定With Read Only,则该视图是可以更新的,对视图的操作将直接写入的数据表中。

那么,如果视图的数据源是多张数据表,而多表视图如果实现可更新视图,则可以大大提高编码的效率。

2 多表可更新视图的应用范围

在程序实现过程中,我们往往会将诸如产品编号、计量单位、客户信息等等存储于的数据表,在销售单据、出入库单据等处,引用其主键ID,就可以指向相关详细信息。

在查询视图上,我们仅需要确定关联关系即可,但在数据录入界面,我们要实现多表信息同步编辑功能时,往往会遇到困扰。需要应用各种各样的编程方法,实现用户需求。

多表可更新视图大大简化前台编程的工作量,对于前台FORM,可以认为该多表可更新视图就是一张完整的业务数据表,而数据的存储逻辑则建立于后台视图的Instead of 触发器中。 3 多表可更新视图的后台实现

建立多表视图的Instead Of Trigger,在Trigger中定义数据存储逻辑,就实现了多表可更新视图<复杂的技术难点,解决的方法往往是无比简单的>。实例如下: 3.1 创建测试数据表

--=================================================== --创建测试表

--=================================================== Drop Table t1; Drop Table t2; create table t1

( t11 numeric(28),t12 varchar2(20)); create table t2

( t11 numeric(28),t22 varchar2(20)); 3.2 多表视图范例

--=================================================== --创建测试视图

--=================================================== create Or Replace view t as

select T1.t11 f1 ,T1.t12 f2 ,T2.t22 f3 from T1,T2

Where T1.t11=T2.t11; 3.3 多表视图触发器范例

--=================================================== --创建视图的替代触发器

--=================================================== Create Or Replace Trigger Trg_InsUpdDel_t Instead Of Insert or update or delete on t

for each row Declare begin

If Inserting Then

Insert Into t1 (t11,t12) Values (:New.f1,:New.f2); Insert Into t2 (t11,t22) Values (:New.f1,:New.f3); elsif Updating Then

Update t1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1; Update t2 set t11=:New.f1,t22=:New.f3 where t11=:New.f1; elsif Deleting then

Delete from t1 where t11=:Old.f1; Delete from t2 where t11=:Old.f1; End if; end;

如此即实现多表可更新视图的定义工作,大家可以试着使用Insert或Delete或Update的SQL语句测试一下。

3.4 数据库后台注意事项

当视图使用Create Or Replace View...重新编译后,该触发器就会被覆盖,找不到了。所以大家记得在重新编译多表可更新视图之后,要重新创建其触发器。

4 多表可更新视图的前台实现及注意事项 4.1 基本实现

在数据源中,定义数据块的数据源为多表可更新视图,即可实现前台设定。 当然还有许多注意事项,否则大家在实际应用过程中就会觉得困难重重。 4.2 FORM前台注意事项

4.2.1 主键,如果多表可更新视图中,包括外联<如:Where t1.t11=t2.t11(+)>,则必须在FORM中定义主键,包括数据块的主键和数据项的主键属性。否则,FORM将会提示―视图不允许更新‖。

4.2.2 SQL,多表视图如果使用Union或Distinct,则前台FORM可能无法实现更新功能。

修改oracle数据库连接数

2007-11-15 02:41

1.修改全局数据库连接数(/export/home/oracle/product/9.2/dbs/spfileemipkf00.ora): $oracle_HOME/product/9.2/dbs/spfile[$SID].ora

$oracle_HOME/home/dbs/spfileemipkf00.ora(和oracle同目录)

修改:*.processes=300(代表系统默认最大连接数为300)

2.用系统管理员,查看当前数据库有几个用户连接: SQL> select username,sid,serial# from v$session; 如果要停某个连接用

SQL> alter system kill session sid,serial#; 如果这命令不行,找它UNIX的进程数

SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号

select username,count(username) from v$session where username is not null group by username;

select sid,logon_time,username,machine from v$session;

select sid,username,status,osuser,process,machine,terminal,program from v$session where username is not null;

当前的连接数

select count(*) from v$process;

设置的最大连接数(默认值为150)

select value from v$parameter where name = 'processes';

修改最大连接数

alter system set processes = 300 scope = spfile;

当数据库最大连接数不够时会出现客户端连接间歇性失败,报错ORA-12519。

二、 调整ORACLE内存设置

1、 点击开始,从程序菜单选择“Enterprise Manager Console”,如下图所示。 2、 进入“登录”界面后,选择“启动”,点击“确定”,如下图所示。 3、 进入“”界面后,选择需要调整内存的数据库,并双击,如下图所示。

4、 进入“数据库连接信息”界面后,输入用户名、口令、选择连接身份为“SYSDBA”,点击“确

定”,如下图所示。

5、 双击打开“例程”,点选“配置”,再选择界面右侧的“内存”选项卡,将SGA中的“SGA的

最大大小”改为512,PGA中的“总计PGA目标”改为128,点击“应用”,如下图所示。 6、 进入“关闭选项”界面后,选择“立即”,点击“确定”,如下图所示。

7、 系统正在关闭数据库等相关操作,处理完成后提示“处理已完成”,点击“关闭”,如下图所

示。

8、 将SGA中的“共享池”改为256;“缓冲区高速缓存”改为48;大型池改为128;“Java池”

改为,再次点击“应用”,如下图所示。

9、 进入“关闭选项”界面后,选择“立即”,点击“确定”,如下图所示。

10、 系统正在关闭数据库等相关操作,处理完成后提示“处理已完成”,点击“关闭”,

如下图所示。

11、 Oracle内存设置调整完毕!

三、 修改Oracle最大连接数的方法

1、 进入“SQL*Plus Worksheet”,如下图所示。 2、 点击“改变数据库连接…”按钮,如下图所示。

3、 进入“数据库连接信息”界面,输入用户名、口令、需要修改最大连接数的数据库服务名,连

接身份选择“SYSDBA”,点击“确定”,如下图所示。

4、 输入指令“show parameter processes;”并执行,查看目前最大连接数,如下图所示。

5、 输入指令“alter system set processes=600 scope=spfile;”并执行,修改最大连接数为600,

如下图所示。

6、 输入指令“create pfile from spfile;”并执行,创建Profile,如下图所示。 7、 关闭“Enterprise Manager Console”,重启Oracle服务或重启Oracle数据库服务器 8、 重复操作1、2、3、4步,确认最大连接数修改成功。

优化数据库大幅度提高Oracle的性能

几个简单的步骤大幅提高Oracle性能--我优化数据库的三板斧。

数据库优化的讨论可以说是一个永恒的主题。资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等。还有的人认为要抓出执行最慢的语句来进行优化。但实际情况是,提出疑问的人很可能根本不懂执行计划,更不要说statspack了。而我认为,数据库优化,应该首先从大的方面考虑:网络、服务器硬件配置、操作系统配置、Oracle服务器配置、数据结构组织、然后才是具体的调整。实际上网络、硬件等往往无法决定更换,应用程序一般也无法修改,因此应该着重从数据库配置、数据结构上来下手,首先让数据库有一个良好的配置,然后再考虑具体优化某些过慢的语句。我在给我的用户系统进行优化的过程中,总结了一些基本的,简单易行的办法来优化数据库,算是我的三板斧,呵呵。不过请注意,这些不一定普遍使用,甚至有的会有副作用,但是对OLTP系统、基于成本的数据库往往行之有效,不妨试试。(注:附件是Burleson写的用来报告数据库性能等信息的脚本,本文用到)

一.设置合适的SGA

常常有人抱怨服务器硬件很好,但是Oracle就是很慢。很可能是内存分配不合理造成的。(1)假设内存有512M,这通常是小型应用。建议Oracle的SGA大约240M,其中:共享池(SHARED_POOL_SIZE)可以设置60M到80M,根据实际的用户数、查询等来定。数据块缓冲区可以大致分配120M-150M,8i下需要设置DB_BLOCK_BUFFERS,DB_BLOCK_BUFFER*DB_BLOCK_SIZE等于数据块缓冲区大小。9i 下的数据缓冲区可以用db_cache_size来直接分配。

(2)假设内存有1G,Oracle 的SGA可以考虑分配500M:共享池分配100M到150M,数据缓冲区分配300M到400M。

(3)内存2G,SGA可以考虑分配1.2G,共享池300M到500M,剩下的给数据块缓冲区。

(4)内存2G以上:共享池300M到500M就足够啦,再多也没有太大帮助;(Biti_rainy有专述)数据缓冲

区是尽可能的大,但是一定要注意两个问题:一是要给操作系统和其他应用留够内存,二是对于32位的操作系统,Oracle的SGA有1.75G的。有的32位操作系统上可以突破这个,方法还请看Biti的大作吧。

二.分析表和索引,更改优化模式

Oracle默认优化模式是CHOOSE,在这种情况下,如果表没有经过分析,经常导致查询使用全表扫描,而不使用索引。这通常导致磁盘I/O太多,而导致查询很慢。如果没有使用执行计划稳定性,则应该把表和索引都分析一下,这样可能直接会使查询速度大幅提升。分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令。对于少于100万的表,可以考虑分析整个表,对于很大的表,可以按百分比来分析,但是百分比不能过低,否则生成的统计信息可能不准确。可以通过DBA_TABLES的LAST_ANALYZED列来查看表是否经过分析或分析时间,索引可以通过DBA_INDEXES的LAST_ANALYZED列。

下面通过例子来说明分析前后的速度对比。(表CASE_GA_AJZLZ大约有35万数据,有主键)首先在SQLPLUS中打开自动查询执行计划功能。(第一次要执行\\RDBMS\\ADMIN\lan.sql来创建PLAN_TABLE这个表)

SQL> SET AUTOTRACE ON SQL>SET TIMING ON

通过SET AUTOTRACE ON 来查看语句的执行计划,通过SET TIMING ON 来查看语句运行时间。 SQL> seleCT count(*) from CASE_GA_AJZLZ; COUNT(*) ---------- 346639

已用时间: 00: 00: 21.38 Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT (AGGREGATE)

2 1 TABLE ACCESS (FULL) OF 'CASE_GA_AJZLZ' ……………………

请注意上面分析中的TABLE ACCESS(FULL),这说明该语句执行了全表扫描。而且查询使用了21.38秒。这时表还没有经过分析。下面我们来对该表进行分析:

SQL> analyze table CASE_GA_AJZLZ compute statistics;

表已分析。已用时间: 00: 05: 357.63。然后再来查询: SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) ---------- 346639

已用时间: 00: 00: 00.71 Execution Plan

0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=351 Card=1) 1 0 SORT (AGGREGATE)

2 1 INDEX (FAST FULL SCAN) OF 'PK_AJZLZ' (UNIQUE) (Cost=351 Card=346351) …………………………

请注意,这次时间仅仅用了0.71秒!这要归功于INDEX(FAST FULL SCAN)。通过分析表,查询使用了PK_AJZLZ索引,磁盘I/O大幅减少,速度也大幅提升!下面的实用语句可以用来生成分析某个用户的所有表和索引,假设用户是GAXZUSR: SQL> set pagesize 0

SQL> spool d:\\analyze_tables.sql;

SQL> select 'analyze table '||owner||'.'||table_name||' compute statistics;' from dba_tables where owner='GAXZUSR'; SQL> spool off

SQL> spool d:\\analyze_indexes.sql;

SQL> select 'analyze index '||owner||'.'||index_name||' compute statistics;' from dba_indexes where owner='GAXZUSR'; SQL> spool off

SQL> @d:\\analyze_tables.sql SQL> @d:\\analyze_indexes.sql

解释:上面的语句生成了两个sql文件,分别分析全部的GAXZUSR的表和索引。如果需要按照百分比来分析表,可以修改一下脚本。通过上面的步骤,我们就完成了对表和索引的分析,可以测试一下速度的改进啦。建议定期运行上面的语句,尤其是数据经过大量更新。

当然,也可以通过dbms_stats来分析表和索引,更方便一些。但是我仍然习惯上面的方法,因为成功与

否会直接提示出来。

另外,我们可以将优化模式进行修改。optimizer_mode值可以是RULE、CHOOSE、FIRST_ROWS和ALL_ROWS。对于OLTP系统,可以改成FIRST_ROWS,来要求查询尽快返回结果。这样即使不用分析,在一般情况下也可以提高查询性能。但是表和索引经过分析后有助于找到最合适的执行计划。 三.设置cursor_sharing=FORCE 或SIMILAR

这种方法是8i才开始有的,oracle805不支持。通过设置该参数,可以强制共享只有文字不同的语句解释计划。例如下面两条语句可以共享:

SQL> SELECT * FROM MYTABLE WHERE NAME='tom' SQL> SELECT * FROM MYTABLE WHERE NAME='turner'

这个方法可以大幅降低缓冲区利用率低的问题,避免语句重新解释。通过这个功能,可以很大程度上解决硬解析带来的性能下降的问题。个人感觉可根据系统的实际情况,决定是否将该参数改成FORCE。该参数默认是exact。不过一定要注意,修改之前,必须先给ORACLE打补丁,否则改之后oracle会占用100%的CPU,无法使用。对于ORACLE9i,可以设置成SIMILAR,这个设置综合了FORCE和EXACT的优点。不过请慎用这个功能,这个参数也可能带来很大的负面影响! 四.将常用的小表、索引钉在数据缓存KEEP池中

内存上数据读取速度远远比硬盘中读取要快,据称,内存中数据读的速度是硬盘的14000倍!如果资源比较丰富,把常用的小的、而且经常进行全表扫描的表给钉内存中,当然是在好不过了。可以简单的通过ALTER TABLE tablename CACHE来实现,在ORACLE8i之后可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP)。一般来说,可以考虑把200数据块之内的表放在keep池中,当然要根据内存大小等因素来定。关于如何查出那些表或索引符合条件,可以使用本文提供的access.sql和access_report.sql。这两个脚本是著名的Oracle专家 Burleson写的,你也可以在读懂了情况下根据实际情况调整一下脚本。对于索引,可以通过ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)来钉在KEEP池中。

将表定在KEEP池中需要做一些准备工作。对于ORACLE9i 需要设置DB_KEEP_CACHE_SIZE,对于8i,需要设置buffer_pool_keep。在8i中,还要修改db_block_lru_latches,该参数默认是1,无法使用buffer_pool_keep。该参数应该比2*3*CPU数量少,但是要大于1,才能设置DB_KEEP_CACHE_BUFFER。buffer_pool_keep从db_block_buffers中分配,因此也要小于db_block_buffers。设置好这些参数后,就可以把常用对象永久钉在内存里。 五.设置optimizer_max_permutations

对于多表连接查询,如果采用基于成本优化(CBO),ORACLE会计算出很多种运行方案,从中选择出最优

方案。这个参数就是设置oracle究竟从多少种方案来选择最优。如果设置太大,那么计算最优方案过程也是时间比较长的。Oracle805和8i默认是80000,8建议改成2000。对于9i,已经默认是2000了。 六.调整排序参数

(1) SORT_AREA_SIZE:默认的用来排序的SORT_AREA_SIZE大小是32K,通常显得有点小,一般可以考虑设置成1M(1048576)。这个参数不能设置过大,因为每个连接都要分配同样的排序内存。 (2) SORT_MULTIBLOCK_READ_COUNT:增大这个参数可以提高临时表空间排序性能,该参数默认是2,可以改成32来对比一下排序查询时间变化。注意,这个参数的最大值与平台有关系。didon

启动2003 tomcat 将JDK中BIN目录下的 msvcr71.dll 复制到 TOMCAT 的 BIN 下。 五分钟分组统计数据 select to_char(jgsj,'yyyy-mm-dd hh24'),trunc(to_number(to_char(jgsj,'mi'))/5,0),count(*) from its_car where jgsj >= to_date('2009-05-12 09:00:01','yyyy-mm-dd hh24:mi:ss') group by to_char(jgsj,'yyyy-mm-dd hh24'),trunc(to_number(to_char(jgsj,'mi'))/5,0) ; ORACLE中取消unique alter table its_car_car drop unique(wybm); 设定TOMCAT session的失效时间。 修改C:\\Tomcat 6.0\\conf\\web.xml 30 Oracle定时执行计划sql //pl/sq中创建执行计划 create or replace procedure delete_its_car_tj_new AS carinfo_id number; BEGIN insert into its_car_tj_new select a.dddm dddm,a.fxmc fxmc,a.cdbh cdbh,a.hpzl hpzl,to_date(a.jgsj,'yyyy-mm-dd hh24:mi:ss') jgsj,a.sl sl,b.qfms hpqf from (select dddm,fxmc,cdbh,hpzl,to_char(jgsj,'yyyy-mm-dd hh24') jgsj,count(xh) sl from its_car where clbj='0' and to_char(jgsj,'yyyy-mm-dd hh24')>=to_char(sysdate-600,'yyyy-mm-dd hh24') and hphm like '%苏B%' group dddm,fxmc,cdbh,hpzl,to_char(jgsj,'yyyy-mm-dd hh24')) a, (select qfms from its_hpqf where hpqf='01') b; commit; end delete_its_car_tj_new; 执行定时执行计划 VARIABLE jobno number; begin DBMS_JOB.SUBMIT(:jobno,'delete_its_car_tj_new;',to_date('2010-05-24 16:25:00', 'yyyy-mm-dd hh24:mi:ss'),'sysdate+1/24'); commit; end; / by //查看有几个执行任务 select job,what,failures,broken from user_jobs select job,next_date,next_sec,failures,broken from user_jobs; //删除某个执行任务,里面的2是id号。 begin dbms_job.remove(624); commit; end; / Oracle查询合并字符串 SELECT CONCAT('http',username) AS zhifu FROM its_user Oracle添加、删除字段 alter table its_user add tqbj varchar2(1); alter table its_user drop column tqbj; Oracle 触发器 插入,更新,删除,数据同步,两表同步 2008年10月13日 星期一 11:49 建表:

create table User_Info (

ID INTEGER not null, UserName VARCHAR(30) not null, PassWord VARCHAR(20) not null, CreateDate Date not null, Status INTEGER not null, constraint PK_User_Info primary key (ID) );

create table User_Info_temp (

ID INTEGER not null, UserName VARCHAR(30) not null, PassWord VARCHAR(20) not null, CreateDate Date not null, Status INTEGER not null, constraint PK_User_Info_temp primary key (ID) );

触发器写法:

create or replace trigger UserToTemp after insert or update or delete on user_info for each row declare

integrity_error exception; errno integer; errmsg char(200); dummy integer; found boolean; begin

if inserting then insert into User_info_temp(ID,UserName,PassWord,CreateDate,Status) values(:NEW.ID,:NEW.UserName,:NEW.PassWord,:new.CreateDate,:NEW.Status); elsif updating then update User_info_temp set ID=:NEW.ID,UserName=:NEW.UserName,PassWord=:NEW.PassWord,Status=:NEW.Status where id=:OLD.id;

elsif deleting then

delete from User_info_temp where id=:OLD.id; end if; exception

when integrity_error then

raise_application_error(errno, errmsg); end;

测试数据: insert into user_info(ID,UserName,PassWord,CreateDate,Status)values(1,'xier','222',to_date('2008-10-11','yyyy-mm-dd'),1)

update user_info u set u.status=3,u.username='xier' where u.id=1 delete from user_info u where u.id=1

触发器例子 CREATE OR REPLACE TRIGGER ITS.USERTOTEMP AFTER INSERT OR DELETE OR UPDATE ON ITS.USER_INFO REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW declare integrity_error exception; errno integer; errmsg char(200); dummy integer; found boolean; dddm char(2); begin if inserting and :NEW.Status='2' then insert into User_info_temp(ID,UserName,PassWord,CreateDate,Status) values(:NEW.ID,:NEW.UserName,:NEW.PassWord,:new.CreateDate,:NEW.Status); elsif updating then update User_info_temp set ID=:NEW.ID,UserName=:NEW.UserName,PassWord=:NEW.PassWord,Status=:NEW.Status where id=:OLD.id; elsif deleting then delete from User_info_temp where id=:OLD.id; end if; exception when integrity_error then raise_application_error(errno, errmsg); end; / ORACLE数据库恢复的方法我们经常会用到,下面就为您介绍重装系统后ORACLE数据库恢复的方法,希望对您学习ORACLE数据库恢复方面能有所帮助。

我的电脑突然挂了,不得不重装系统,不过我的ORACLE装在了D盘,所有的文件都还在,我相信一定能够恢复,直到搞定工作,我才开始整我的数据库,花了两天时间,终于恢复了,庆祝一下,同时总结一下,希望有遇到同样问题的朋友能够快速搞定此类问题

第一种:

首先,备份数据库(X:\\oracle\\oradata)下的数据文件,重新命名即可(否则装数据库的时候会提示sid已存在)。重新安装数据库,当然数据库的名字就是你要恢复的名字。安装完成后,打开控制面板,停止oracle的服务。把(X:\\oracle\\oradata)下新生成的文件改名,把原先目录下的文件恢复名字。再重新启动oracle服务和监听。用sys/as dba 登陆数据库,可能会提示权限不够(ora-01031)修改(X:\\oracle\\ora92\\network\\admin )文件夹下的sqlnet.ora文件,添加SQLNET.AUTHENTICATION_SERVICES= (NTS),增加权限。登陆进去后,打开table提示不能打开。打开common页,执行命令alert database open;这时再刷新table,发现原先的表可以打开了。恢复成功了。再用原先数据库的普通用户进入。发现一切正常。至此,大功告成。

第二种:

1、首先,将原来的ORACLE文件夹改名,原来的路径是D:/oracle。我暂时改成D:/oracle_old。找来ORACLE(我用的是ORACLE 9I)安装光盘,将ORACLE安装在原来安装的目录下,这样恢复起来更加方便,主要是注册表的内容不用修改。

2、安装完了之后,系统中又有一个可以使用的ORACLE了。这个时候要做的就是将原来的文件和数据恢复过来。第一步,先关闭ORACLE的所有已经启动的项目,在―服务‖里面逐一关闭。然后,将安装目录改名。我现在用的是D:/oracle。改成D:/oracle_new。再将D:/oracle_old改成D:/oracle。 这样理论上说从物理层面恢复了ORACLE了。但是我们发现,现在还不能启动ORACLE的监听程序和服务程序。我们还要从逻辑上解决。

3、在dos环境下执行一个删除命令:oradim -delete -sid mm,其中mm为创建oracle时候创建的实例 建议执行这个命令后重新启动机器,重启后就可以建立和原来实例名相同

的实例。当然你懒,不重新启动也可以,但是你的实例名就不能和原来的一样了。

4、在dos环境下执行命令 oradim -new -sid mm -startmode a -pfile \"D:\\oracle\\admin\\mm\\pfile\\initmm.ora \"创建一个新的实例,其中 ―mm―为新数据库的名称。

5、启动服务,先打开数据库,然后可以用以前的用户名和密码登陆进去。 要补充的是,一般的ORACLE数据库的监听程序都是用电脑的名称来识别地址的,而不是127.0.0.1或者localhost。所以,如果我们安装系统的时候用的是不同的电脑名称(比如我原来用的是wm_mm。重新安装后用的是wenming_mm),那么我们还有一个工作要做,就是修改文件 listener.ora。将里面的相关的东西改过来就可以了。

需要耐心、细心,可能在一步里有一个细小的差别就会出些古怪的错误提示,有时需要根据错误提示采取策略,总之原理是,先装一个一模一样的ORACLE,安装目录、数据库名称都一样,这样保证注册表里不用更改;再覆盖物理文件,最后重新实例化,打开数据库就可以进去了。

注:恢复必须要有以下文件 a、初始化参数文件INIT.ORA b、所有数据文件 .dbf c、所有重做日志文件(联机日志、归档日志)redo d、所有控制文件 crtl e、internal密码文件

连不上远程数据库 C:\\Tomcat 6.0\\webapps\\ROOT\\WEB-INF\\classes\\com\\its\\dbmanager 直接修改DBConnection.class的链接 1.修改全局数据库连接数(/export/home/oracle/product/9.2/dbs/spfileemipkf00.ora): $oracle_HOME/product/9.2/dbs/spfile[$SID].ora

$oracle_HOME/home/dbs/spfileemipkf00.ora(和oracle同目录)

修改:*.processes=300(代表系统默认最大连接数为300)

2.用系统管理员,查看当前数据库有几个用户连接: SQL> select username,sid,serial# from v$session; 如果要停某个连接用

SQL> alter system kill session sid,serial#; 如果这命令不行,找它UNIX的进程数

SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号

当前的连接数

select count(*) from v$process;

设置的最大连接数(默认值为150)

select value from v$parameter where name = 'processes';

修改最大连接数

alter system set processes = 300 scope = spfile;

当数据库最大连接数不够时会出现客户端连接间歇性失败,报错ORA-12519。

删除表数据,释放表空间 在一个应用中如果数据量比较大,开始影响到页面 sql 执行效率的时候,我们通常会考虑到将历史数据搬迁到一个历史库中,以此来提高当前系统的性能,但往往有时候可以发现搬迁了以后效率并没有提升或者反而有一定的下降。

其中一个主要的原因就是我们在操作的时候通常都是用 delete 语句来删除一些历史数据,但 delete 语句是不会释放表空间占用的数据块,也

就是说数据是删掉了,但位置还保留着,这块空着的表空间只能由以后再 insert 进来的时候填充。很显然这不是我们想要的效果,我们想要的就是减少表空间,提高 sql 的执行效率。

下面说下解决的办法,思路就是用 alter table XX move tablespace XX; 语句将表先移到一个空闲的表空间上再移回来,网上也有人通过查 user_tables 里面的 block 字段来观察 move 表空间前后的占用的块,那个里面只是一个统计的结果,不能作为实际考量,因为在 move tablespace 的时候所有字段的 rowid 都是重新创建的,没有数据的那些块自然也就丢掉了,再 move 回来。可以理解成类似于在其他表空间创建一个临时表,把当前的表删掉重新建回来。

还有一点要注意的就是,move 的同时既然 rowid 是重新创建的,那么该表上的索引自然也就失效了,再 move 回来以后别忘了把索引重新再建一下,要不然 sql 会报错无法执行。

最后别忘了分析下表。analyze table XX compute statistics; 重建索引 alter index pk_its_car201011 rebuild;

alter tablespace 表空间名 add datafile '/u1/oradata/userdata_002.ora' size 50m;

编写 Oracle存储过程解析XML,并把数据持久化

文章分类:数据库

需要解析的xml文件:people.xml 1 2

3

4 Tony Blair

5

10 Downing Street, London, UK
6 (061) 98765 7 (061) 98768

8 blair@everywhere.com 9

10 11 Bill Clinton

12

White House, USA
13 (001) 00 98765 14 (001) 00 98769 15 bill@everywhere.com 16

17 18 Tom Cruise

19

57 Jumbo Street, New York, USA
20 (001) 4500 67859 21 (001) 4500 675

22 cruise@everywhere.com 23

24 25 Linda Goodman

26

78 Crax Lane, London, UK
27 (061) 567 28 (061) 56772

29 linda@everywhere.com 30 31

我以scott用户为例,新建表: 1 CREATE TABLE PEOPLE 2 (

3 PERSONID VARCHAR2(4) PRIMARY KEY, 4 NAME VARCHAR2(50), 5 ADDRESS VARCHAR2(200), 6 TEL VARCHAR2(20), 7 FAX VARCHAR2(20), 8 EMAIL VARCHAR2(100) 9 );

解析并持久化的存储过程代码: 1 /**

2 *file_path 需要解析的XML文件路径 如:D:\\OracleTest\\people.xml 3 *log_path 保存日志的文件的路径 如: D:\\OracleTest\\xmllog.txt

4 **/ 5

6 CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2) 7 AS

8 --//XML解析器

9 xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER; 10 --//DOM文档对象

11 doc xmldom.DOMDocument; 12 len integer;

13 personNodes xmldom.DOMNodeList; 14 chilNodes xmldom.DOMNodeList; 15 tempNode xmldom.DOMNode;

16 tempArrMap xmldom.DOMNamedNodeMap; 17 --================================ 18 --以下变量用于获取XML节点的值 19 pid varchar2(4); 20 name varchar2(50); 21 address varchar2(200); 22 tel varchar2(20); 23 fax varchar2(20); 24 email varchar(100); 25 tmp integer;

26 --================================ 27 BEGIN

28 xmlPar := xmlparser.newParser;

29 xmlparser.setErrorLog( xmlPar, log_path); 30 xmlparser.parse(xmlPar, file_path); 31 doc := xmlparser.getDocument( xmlPar ); 32 -- 释放解析器实例

33 xmlparser.freeParser(xmlPar); 34 -- 获取所有PERSON元素

35 personNodes := xmldom.getElementsByTagName( doc, 'PERSON' ); 36 len := xmldom.getLength( personNodes ); 37 --遍历所有PERSON元素 38 FOR i in 0..len-1 39 LOOP

40 --获取第i个PERSON

41 tempNode := xmldom.item( personNodes, i ); 42 --所有属性

43 tempArrMap := xmldom.getAttributes(tempNode); 44 --获取PERSONID的值

45 pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSONID')); 46 --获取子元素的值

47 chilNodes := xmldom.getChildNodes(tempNode);

48 tmp := xmldom.GETLENGTH( chilNodes );

49 name := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 ))); 50 address := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 ))); 51 tel := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 ))); 52 fax := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 ))); 53 email := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 ))); --插入数据

55 INSERT INTO PEOPLE VALUES (pid,name,address,tel,fax,email); 56 COMMIT; 57 END LOOP; 58 -- 释放文档对象

59 xmldom.freeDocument(doc); 60 EXCEPTION

61 WHEN OTHERS THEN

62 DBMS_output.PUT_LINE(SQLERRM); 63 END addPerson;

有许多朋友都说执行时出现错误,现在我把我在Oracle9i使用的截图贴出来,以作参考:

存储过程截图

Oracle遇到了这个问题 ora-01033 今天研究Oracle遇到了这个问题 ora-01033 : oracle initialization or shutdown in progress,经过分析研究终于解决了,写下来纪念一下。我的库是oracle 9i,具体就是90的。 一、首先:问题的产生原因,出现这个错误是因为我将oracle\\oradata\\oradb下的一个文件误删除掉后出现的。 二、现象:SQL*Plus无法连接,显示以下错误: ORA-01033 : ORACLE initialization or shutdown in progress ,Enterprise Manager Console中也是同样的错误。 三、分析:应该是Oracle在启动后,用户登录时是要将方案中原有配置信息装载进入,装载过程中遇到原有文件指定的位置上没有找到,所以就报出错误。 四、解决过程: 1、我在解决时由于着急使用,便用Database Configuration Assistant工具重新创建了一个新的库,临时解决急用的问题,同时也给后期解决ora-01033问题埋下了隐患。 2、在9i中是没有svrmgrl 命令的,要用sqlplus。 3、先在windows下运行cmd,进入DOS环境。 4、以DBA用户登录,具体命令是 sqlplus /NOLOG SQL>connect sys/change_on_install as sysdba 提示:已成功 SQL>shutdown normal 提示:数据库已经关闭已经卸载数据库 ORACLE 例程已经关闭 SQL>startup mount 提示:ORACLE例程已经启动 Total System Global Area 118255568 bytes Fixed Size 282576 bytes Variable Size 82886080 bytes Database Buffers 3332 bytes Redo Buffers 532480 bytes 数据库装载完毕 SQL>alter database open; 提示:第 1 行出现错误: ORA-01157: 无法标识/锁定数据文件 19 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 19: ''C:\\oracle\\oradata\\oradb\\FYGL.ORA' 这个提示文件部分根据每个人不同情况有点差别。 继续输入 SQL>alter database datafile 19 offline drop; 提示:数据库已更改。 循环使用最后两步,直到alter database open;后不再提示错误,出现“数据库已更改”。 然后接着输入即可 SQL>shutdown normal 提示:数据库已经关闭已经卸载数据库 ORACLE 例程已经关闭 SQL>startup 提示:ORACLE例程已经启动 Total System Global Area 118255568 bytes Fixed Size 282576 bytes Variable Size 82886080 bytes Database Buffers 3332 bytes Redo Buffers 532480 bytes 数据库装载完毕 就可以解决了。 通过JOB增加分区

=========================================================== 作者: yangtingkun(http://yangtingkun.itpub.net) 发表于: 2005.01.26 11:49 分类: ORACLE

出处: http://yangtingkun.itpub.net/post/468/15982 ---------------------------------------------------------------

有个朋友问起,一时手痒就写了个简单的例子:

SQL> create table t (id number, time date) 2 partition by range (time)

3 (partition p20050124 values less than (to_date('2005-01-25', 'yyyy-mm-dd'))); 表已创建。

SQL> create or replace procedure p_add_partition(p_table_name in varchar2) as

2 v_time date default trunc(sysdate); 3 begin

4 execute immediate 'alter table ' || p_table_name || ' add partition p' ||

5 to_char(v_time - 1, 'yyyymmdd') || ' values less than

6 ( to_date(''' || to_char(v_time, 'yyyy-mm-dd') || ''', ''yyyy-mm-dd''))'; 7 end; 8 / 过程已创建。

SQL> select partition_name from user_tab_partitions where table_name = 'T';

PARTITION_NAME

------------------------------ P20050124

SQL> exec p_add_partition('T') PL/SQL 过程已成功完成。

SQL> select partition_name from user_tab_partitions where table_name = 'T';

PARTITION_NAME

------------------------------ P20050124 P20050125

SQL> declare

2 v_job number; 3 begin

4 dbms_job.submit(v_job, 'p_add_partition(''T'');', trunc(sysdate + 1), 'trunc(sysdate + 1)'); 5 commit; 6 end; 7 /

PL/SQL 过程已成功完成。

数据库 ORA_01034错误 Oracle位 查看表容量大小 Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 数据库中文字符集的安装 simplified chinese_china.zhs16gbk Oracle报无监听解决方法,重建

SQL>create spfile from pfile='c:\\init.ora'

注意,pfile=后面的路径一定要加单引号,要不然报―invalied file name‖错误

删除表分区 alter table its_car drop partition ITS_CAR20130419; 删除分区分析索引 alter table its_car drop partition ITS_CAR20130419 update global indexes 创建分区索引 CREATE INDEX INX_its_car_jgsj ON its_car(jgsj,kkbh) LOCAL; --1 SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; --180 天到期 更改密码为无期 --2 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- banwoyixia.com 版权所有 湘ICP备2023022004号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务