Amon's Blog

猛猛如玉

flex下载文件的时候很恶心,第一次下载完后,如果服务器上这个文件又修改了,再下载时是还是取的缓存里第一个文件。
通过加随机数(也就是方法二)目测是解决了这个问题,后台仔细测试的时候发现居然在ie中还是不行,在chrome中可以。
后台又找了第一种方法,是ok的。

方法一:
本人解决的方法,保证可用。
添加过滤器(代码如下)
package com.cn.util;

import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.HttpServletResponse;

public class ForceNoCacheFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
((HttpServletResponse) response).setHeader(“Cache-Control”,”no-cache”);
((HttpServletResponse) response).setHeader(“Pragma”,”no-cache”);
((HttpServletResponse) response).setDateHeader (“Expires”, -1);
filterChain.doFilter(request, response);
}
public void destroy()
{
}
public void init(FilterConfig filterConfig) throws ServletException
{
}
}

然后在web.xml中添加这个过滤器

NoCache
com.cn.util.ForceNoCacheFilter


NoCache
/*

com.cn.util.ForceNoCacheFilter为刚才过滤器的包名.类名,/*为匹配所有请求。

这样你所有的请求都将会传到服务器处理,不会查看缓存了。

方法二:
inComeHttp.url=”familyGroup.do?method=query&tmp=”+Math.random();
url上随意传一个随机数

今天用sql脚本初始化数据库数据的时候出现在了标题中的错误。
后经检查怀疑是格式或编码的问题。
如果是格式的问题,需要用dos2unix,windows中和linux系统的换行符不同。
命令如下:
dos2unix initData.sql
如果是编码的问题,需要用iconv来转换文件的编码为数据库的编码。
命令如下:
iconv -f fromencode -t toencode fileName

查看数据库编码:
select * from nls_database_parameters where parameter =’NLS_CHARACTERSET’;

由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等。

在其他 linux 操作系统 (如 fedora) 下,可以使用
su
切换到超级用户。
当输入 su 命令后, 系统会要求输入 root 的密码。
可是,在 Ubuntu 下我们根本不知道 root 的密码是什么。

这样,在 Ubuntu 下切换到超级用户需要使用其他方法,主要有两种:

  1. sudo -i

sudo
是 su 的加强版,意思是 do something as the supervisor。
不需要密码就可以得到 root 的权限。
但是它也有很多限制,比如,在默认的情况下,只能在 5 分钟之内使用 root 权限。

  1. 如果想一直使用 root 权限,还是要使用 su, 还是要得到 root 密码的。

    sudo passwd root
    可以设置 root 的密码。
    之后就可以自由使用 su 命令啦。

  1. 导出时候出现:IMP-00010: 不是有效的导出文件, 头部验证失败。
    经查明是导出和导入的oracle版本不同,用文件编辑器修改dmp文件的头部分的版本信息,改为导入oracle的版本。
    对应版本:
    11g R2:V11.02.00
      11g R1:V11.01.00
      10g:V10.02.01

  2. 警告: 这些对象由 xxx导出, 而不是当前用户
    在导出语句中加上fromuser=xxx touser=xxxx

附oracle导出格式:
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以”00”打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=" where filed1 like ‘00%’"

 上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
                 不过在上面命令后面 加上 compress=y  就可以了

数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。

注意:
你要有足够的权限,权限不够它会提示你。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

数据导出:
exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;

导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!

同名用户之间的数据导入:
imp hkb/hkb@xe file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y

不同名之间的数据导入:
imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp

log=c:\orabackup\hkbimp.log;

今天在从某个server上取文件,但是本地无法直接连接,只能通过另外一台server连接,再ssh到它的上面。
1.在有外网ip的server上:sftp username@ip
get filename
2.在本地用secureCRT登录有外网ip的server,alt+P打开sftp标签页,get filename

附sftp相关command
sftp> help
可用命令:
cd 路径 更改远程目录到“路径”
lcd 路径 更改本地目录到“路径”
chgrp group path 将文件“path”的组更改为“group”
chmod mode path 将文件“path”的权限更改为“mode”
chown owner path 将文件“path”的属主更改为“owner”
exit 退出 sftp
help 显示这个帮助文本
get 远程路径 下载文件
ln existingpath linkpath 符号链接远程文件
ls [选项] [路径] 显示远程目录列表
lls [选项] [路径] 显示本地目录列表
mkdir 路径 创建远程目录
lmkdir 路径 创建本地目录
mv oldpath newpath 移动远程文件
open [用户@]主机[:端口] 连接到远程主机
put 本地路径 上传文件
pwd 显示远程工作目录
lpwd 打印本地工作目录
quit 退出 sftp
rmdir 路径 移除远程目录
lrmdir 路径 移除本地目录
rm 路径 删除远程文件
lrm 路径 删除本地文件
symlink existingpath linkpath 符号链接远程文件
version 显示协议版本

oracle分页查询时,会遇到数据重复的问题,下面就教您一个解决oracle分页查询数据重复问题的方法,希望对您能够有所帮助。

在oracle分页查询中,我们采用类似以下所示的公认的比较高效的数据库分页查询语句(Effective Oracle by Design中有描述、众多oracle使用者也做过测试)。

写道

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= n)
WHERE RN > m
这里的ROWNUM是一个伪列,它是oracle为查询结果所编的一个号,第一行的 ROWNUM为1,第二行为2,以此类推。

因为oracle是按块进行读取数据的,如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序。事实上,oracle没有进行任何排序操作,如果sql没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端。所以在没有使用排序sql的时候,分页返回的数据可能是按顺序的,也可能是杂乱无章的,这都取决与数据的存储位置。在oracle分页查询过程中,如果数据的物理位置发生了改变,就可能会引起分页数据重复的现象。

所以,要正确使用oracle分页查询,sql语句中必须有排序条件。

但是,在有排序条件的时候,仍然会出现数据重复的现象,这是为什么呢?

通过了解oracle的排序机理就会明白,出现这种情况的原因是因为排序列值的不唯一性。 Oracle这里使用的排序算法不具有稳定性,也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。

解决的方法是在后边增加一个唯一性列,比如主键。

所以解决方法如下(两个条件必须同时满足):
**
1.sql语句中需要有排序条件。

2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。**

1.2012年的十一从深圳去湖南株洲爸妈那。期间全家去张家界旅游。

2.在株洲开往张家界的列车上,我们4个打跑的快,4个人一副牌,每个人的牌很少,所以总是少这少那。一次我缺个7,就在取牌的时候大呼“7!7!”,老妈听到,你妻没来。(- -#好吧,老妈,这都被你知道了!)

3.一路上都是山,火车总是穿山的隧道,窗外一黑一黑的。老妈不满意了,诗曰:一山一水一黑洞。 众人大惊,无人能应下一句。

4.一起吃饭的时候,因为最近你幸福吗比较火,遂问老妈:你幸福吗?老妈整理了一下普通话语气(在家我们都是说方言)颤抖的说道:我很幸福。我有一个好老公,一个好儿子一个好女儿。我很幸福。 大家大笑,又问: 既然你这么幸福了怎么还总是生气发脾气呢? 答曰:这个是控制不住的,有时候不想生气但还是控制不住。问:那你生气的时候考虑了你老公的感受吗? 只听老爸在那悠悠可怜的唱道:我多么多么多么(此处省略N个多么)想…

在tomat的任意app中创建一个jsp文件。

代码如下:
`
<%@page contenttype=”text/html” pageencoding=”UTF-8”>

<%

double total = (Runtime.getRuntime().totalMemory()) / (1024.0 * 1024);

double max = (Runtime.getRuntime().maxMemory()) / (1024.0 * 1024);

double free = (Runtime.getRuntime().freeMemory()) / (1024.0 * 1024);

out.println(“Java 虚拟机试图使用的最大内存量(当前JVM的最大可用内存)maxMemory(): “ + max + “MB
“);

out.println(“Java 虚拟机中的内存总量(当前JVM占用的内存总数)totalMemory(): “ + total + “MB
“);

out.println(“Java 虚拟机中的空闲内存量(当前JVM空闲内存)freeMemory(): “ + free + “MB
“);

out.println(“因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,
“ +

“而JVM实际可用内存并不等于freeMemory(),而应该等于 maxMemory()-totalMemory()+freeMemory()。
“);

out.println(“JVM实际可用内存: “ + (max - total + free) + “MB
“);

%>

`

保存运行即可。

常见的内存溢出有以下两种:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space

 


这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。
一、java.lang.OutOfMemoryError: PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

 

二、java.lang.OutOfMemoryError: Java heap space
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。 
解决方法:手动设置Heap size


 

Linux下修改JVM内存大小:

要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.

OS specific support.  $var must be set to either true or false.

JAVA_OPTS=”-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m”
cygwin=false

 

windows下修改JVM内存大小:

情况一:解压版本的Tomcat, 要通过startup.bat启动tomcat才能加载配置

要添加在tomcat 的bin 下catalina.bat 里

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%后面添加,红色的为新添加的.

set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

 

情况二:安装版的Tomcat下没有catalina.bat

windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home=”C:\ApacheGroup\Tomcat 5.0”
-Djava.endorsed.dirs=”C:\ApacheGroup\Tomcat 5.0\common\endorsed”
-Xrs

加入 -Xms300m -Xmx350m   重起tomcat服务,设置生效
 

各参数的比例:

Xmx 与PermSize的和不可超过JVM可获得的总内存

PermSize不可大于Xmx

 

请参见其它的参数详解的文章,各参数值大小的本文不讨论.

0%