Amon's Blog

猛猛如玉

Hello, 这是我的新博客。

它托管在 github上 。不定时更新。
以前的博客使用 WordPress,基于革命同志的俭朴精神,现在使用免费的 Github + jekyll + markdown。

本博客于 2013 年 5 月 23 正式启用。

于 2015 年 7 月 21 日正式更新 2.0,使用免费的github+hexo+markdown.

于 2024 年 5 月 14 日正式更新 Hexo 与 Hexo-theme-NexT 至最新版本.

记得有个人说过,开blog的人有几步:
1.在csdn,iteye这样的网站上开blog
2.自己搞定域名和主机,开blog
3.最终会把blog托管给别的地方。
现在我已经走到第3步了,因为不想折腾这个wp了,虽然开了一年也没怎么折腾,就是写写blog。
本来想搞定域名可以做做自己的网站什么的,但是暂时太忙了,等以后闲下来再说吧。
先准备迁到github上去。
我的github地址:http://xumeng.github.io/

不能打开磁盘vmname- 000001.vmdk或者是所依赖的磁盘快照。原因:创建子磁盘快照后父磁盘被修改过.
某次在vm用linux的快照的时候,不能恢复了,提示上述错误,google it的方案是:
每个虚拟磁盘都有两个附属VMDK文件,较大的文件名称最后有-flat,是虚拟磁盘的实际原始数据。较小的文件是描述符文件,包含虚拟磁盘配置的基本 信息。使用诸如Nano等文本编辑器打开原始磁盘的描述符文件(通常情况下和虚拟机的名称相同,如myvm.vmdk),可以看到列出来的CID和父 CID。第一个磁盘的父CID一般是“ffffffff”,在下面的例子中需要注意快照的父CID和原始磁盘的CID并不一致。
  原始磁盘文件:
  CID=37b6f123
  parentCID=ffffffff
  快照磁盘文件:
  CID=afafa03b
  parentCID=ba4f9916
  为了重新关联父子CID,编辑快照的描述符VMDK文件。标识原始磁盘文件的CID,修改快照磁盘文件的父CID,保证两者一致。如下所示:
  原始磁盘文件:
  CID=37b6f123
  parentCID=ffffffff
  快照磁盘文件:
  CID=afafa03b parentCID=37b6f123
  重新启动虚拟机,就可以顺利重新引导系统了。

PS:如果是分盘的,我们会发现,vmdk1的CID是vmdk2的parentCID,vmdk2的CID是vmdk3的parentCID,依此类推,按顺序修改即可。

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.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。**

0%