Amon's Blog

猛猛如玉

  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

 

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

每周一下午4点是固定的打篮球时间,

我本不是热爱篮球的人,但是因为这2个小时不必坐在办公室埋头苦干,能多呼吸一点外面虽然不新鲜的空气,所以每周一都是很积极着跟着同事去打篮球。
每次打球,无论是抢篮板数还是命中数,都是我最低,不是因为我最不会打,而是我最懒,相比别人不停的奔跑着抢篮板,我更多的是站在那里或者做着小弧度的移动,盯着球,等待着抢篮板的机会。除了偶然的守株待兔捡来个球,我始终是一个围观者。虽然我也告诉自己要动起来,不要怕累,不要怕出汗,不要怕被球砸伤被人碰伤,但身体始终无法执行大脑发的指令。

这让我想起了打魔兽,我最热爱的游戏,很久以前我是一个小小菜鸟,当然现在也仍然是一个菜鸟。打魔兽的时候,我也是喜欢盯,盯着建筑里面出兵,等待着兵出来我操作;盯着打怪,等待怪被打死然后收宝;盯着部队交战,等待敌人落荒而逃或者自己丢盔弃甲…后来知道了APM这个概念后,我发现我需要动起来,我不能让我的手停下来,一停下来我就会习惯了停,习惯了等待。之后,我的apm由开始的50,在我每打完一局就打开w3gmaster看自己的apm,100,150,200…此时再玩起魔兽,我已然有了一种满满的感觉,再快的节奏,再多的队伍,再复杂的操作也能轻松完成。

我在想,打球是不是也这样,如果我可以动起来,不停的奔跑,不停的追逐,哪怕累一点,哪怕很多时候抢不到球,我仍然可以比之前更出色。
那么,生活也是同理了,如果我不这么懒,我动起来,我的生活也会出色!
如果是这样,那么从这个blog开始,start here!

以前因为开机要启动什么mysql服务,oracle服务,所以就创建了批处理文件。

现在因为每天早上来上班,流程基本一样,打开工作软件、聊天工具、邮箱客户端等等。

每天都要逐个点,很麻烦。

今天忽然心血来潮找了下批处理文件运行exe程序,还真的有,也很简单。

来看吧:

1.右键新建一个txt文件,命名并改后缀为.bat

2.用记事本等文本编辑工具打开,输入程序执行文件的详细目录加文件名。

如我要打开qq:

start D:"Program Files”\System\Tencent\QQ\Bin\qq.exe

3.保存,直接双击这个bat文件运行即可,发现qq被打开了。OK

remark:

1.也可以运行快捷方式,如:

start d:/iUse/QQ.lnk

快捷方式的后缀是lnk。

2.目录中有空格要注意,直接写是不行的,不能识别。如:

start d:/Program Files/System\Tencent\QQ\Bin\qq.exe   error

需要加引号:

start d:/“Program Files”/System\Tencent\QQ\Bin\qq.exe   right

注意引号是英文半角的。

 

 

 

 

作为强迫症患者的我每次看到自动保存草稿的时候都忍不住要删除草稿。现在方法来了。

第一种方法是使用“WP Cleaner”插件

下载博客插件WP Cleaner,并上传至wp-content/plugins/目录下;登陆博客后台,在已安装插件列表中启用该插件;启用WP Cleaner插件后,在“设置”选项卡下会生成“WP Cleaner”选项;点击“wp cleaner”选项进入插件界面;可供选择的删除选项有“删除所有修订版”、“删除所有草稿”、“删除所有修订版和草稿”、“删除所有修订版-继承”,想要删除哪一项就点击哪一项就可以了。

第二种方法是直接在数据库中用SQL语句删除

数据库中有很多表,其中“wp_posts”是用于保存你所有的文章相关信息的,非常的重要,一般它存储的数据也是最多的。我们清理自动保存的草稿和修订版也是在这里面清理,命令如下:

DELETE FROM wp_posts WHERE post_status!=’publish’ OR post_type=’revision’;

其实,wordpress自动存草稿和保留修订版的功能是可以直接禁用掉的,不过听说新版本中的插件已经失效了,剩下的唯一的方法是该代码,操作起来比较麻烦,所以还是隔一段时间清理一次吧。

 

只试过第二个方法,为了这个还装个plugins我是不愿意的。

sql解释:删除 wp系统文章表wp_posts里状态不是 publish 或者post_type = revision 的记录。

tomcat使用的是电脑的80端口。 

当客户端访问的时候就会,会和服务器端的80端口建立连接。 

现在在做压力测试。当多个用户访问的时候,服务器端的80端口就会被一直被连接占用着,导致服务器端的CPU很容易就飙升到100%。 

连接数据库用的是tomcat连接池。 

可能性分析:
80被长期占用,因为tomcat会启动连接池,注意是tomcat的连接池,不是数据库连接池,

这个连接池用来处理外面访问tomcat的链接,默认是25个 
你可以到 tomcat/conf/server.xml里面看到

至于服务器端的CPU很容易就飙升到100% 
这个是 
1 你的程序运行速度慢,导致一直使用cpu,一般是算法问题 
2 你的程序有死循环 
3 数据库有问题,不过一般都是设计或者编码的问题 
4 硬件太差了,内存太小,(可能行不大) 
5 负载过高

 

 

ps:

1:  首先把JDK Linux版本上传到服务器上.
2:  使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈.
3: 使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高. 

4. 把第三步占用CPU过高的pid值转换为 16 进制, 然后在第2步打印的

线程栈中进行搜索, 就可以知道这个线程栈是做什么的了.

 

0%