[%l]不行,只能显示,click点说找不到文件。得在%前加一个空格。折腾。
http://stackoverflow.com/questions/9588580/log4j-in-java-project-displays-wrong-file-when-clicking-on-link-from-conversion
2016年12月14日星期三
2016年11月29日星期二
firefox是越来越不给力了
突然就慢了,不是说启动慢,是说加一个tab,或者中键滚动慢。不知道是否因为自动升级导致,google了几下
设置了browser.tabs.animate为false,好像起了效果。
设置了browser.tabs.animate为false,好像起了效果。
2016年11月2日星期三
类名.this 类名.super的用法
http://www.cnblogs.com/PengLee/p/3993033.html
①当在一个类的内部类中,如果需要访问外部类的方法或者成员域的时候,如果使用 this.成员域(与 内部类.this.成员域 没有分别) 调用的显然是内部类的域 , 如果我们想要访问外部类的域的时候,就要必须使用 外部类.this.成员域
package com.test;
public class TestA { public void tn() { System.out.println("外部类tn"); } Thread thread = new Thread(){ public void tn(){System.out.println("inner tn");} public void run(){ System.out.println("内部类run"); TestA.this.tn();//调用外部类的tn方法。 this.tn();//调用内部类的tn方法 } }; public static void main(String aaa[]) {new TestA().thread.start();}
}
2016年10月19日星期三
firebug color
Format Description
Bold Black Objects
Black DOM objects
get in gray "Getter" functions
Bold green User functions
Green DOM functions
Bold Red Constructor functions
http://getfirebug.com/wiki/index.php/DOM_Panel
Bold Black是Object,Class的instance了
Bold Red还是Class
2016年10月18日星期二
nth-of-type的选择器和class谁优先?
今天写一个东西,这样子的
.grid-autotrail tbody tr td.range:nth-of-type(3) {
border-right: 1px red dotted;
}
本来想选出tr里面是td.range的第三个,结果选出来的是
tr里面第三个td,并且有range的
也就是nth-of-type这样的,不受前面class的影响。
.grid-autotrail tbody tr td.range:nth-of-type(3) {
border-right: 1px red dotted;
}
本来想选出tr里面是td.range的第三个,结果选出来的是
tr里面第三个td,并且有range的
也就是nth-of-type这样的,不受前面class的影响。
2016年9月26日星期一
2016年9月23日星期五
csrf(跨站请求伪造)流程
1。用户正常登录了正规网站A。产生了cookie。
2。用户没退出的情况时,访问了网站B。B的页面里面,有网站A的连接,比如http://www.a.com/xxx,比如<img src="http://www.a.com/xxx/yyy"/>
3。用户往往B的他页面时,会去访问A,访问A时也会带上A的cookie,由于cookie是正常的,A会认为是一个合法的请求,进而进行处理。自然B网站也可以搞自动post等背后动作,只要cookie有效。
对于这样的情况,网站A的可以检查http_Referer来判断,但是referer也是可以伪造的,不保险。
所以有效的还是在form里面,埋入token。
spring security里面的csrf对策,就是埋入token,来检测请求的有效性。但是,一旦启用了csrf,就必须用到session。有没有不用session的csrf的检测方法呢?
【仔细看了文档,spring也可以将csrf写入cookie里,来做到stateless,CookieCsrfTokenRepository】
考虑到的方法有,写cookie,cookie里面埋入token,并且form里面也埋入hash过的token。服务器端来比较两个token是否一样。这里用到的原理是,第三方网站(比如上面的B)没法获取A的cookie【也是理论上的】,所以B的页面的form里面,也就没法埋入A的cookie了。
http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html
的文档里面,描述了为啥没用CookieCsrf作为默认而用Session作为默认的原因。如果要用session,那么普通的rest也就是有状态了,所有的请求都需要提交csrf字段。
https://www.blogger.com/blogger.g?blogID=8899947124180453470#editor/target=post;postID=327728104436759904
如果cookie泄漏了怎么办?XSS(跨站脚本攻击)手法是可以偷cookie的。
怎么偷,首先,网站得是一个可以运行人发言的网站,比如论坛。A在发言代码里面嵌入javascript,如果网站没有做处理,照本显示,那么B浏览网站时就会执行A嵌入的代码。由于是网站页面自身的script,script就可以拿到B的cookie了,自然也可写script将偷来的cookie发给A。
spring security里面对xss,没有特别的招,就是3个encoding。
1。ouput文字的时候,html encoding
2。 ouput javascript的时候,javascript encoding
3。事件绑定时,handler encoding。
2。用户没退出的情况时,访问了网站B。B的页面里面,有网站A的连接,比如http://www.a.com/xxx,比如<img src="http://www.a.com/xxx/yyy"/>
3。用户往往B的他页面时,会去访问A,访问A时也会带上A的cookie,由于cookie是正常的,A会认为是一个合法的请求,进而进行处理。自然B网站也可以搞自动post等背后动作,只要cookie有效。
对于这样的情况,网站A的可以检查http_Referer来判断,但是referer也是可以伪造的,不保险。
所以有效的还是在form里面,埋入token。
spring security里面的csrf对策,就是埋入token,来检测请求的有效性。但是,一旦启用了csrf,就必须用到session。有没有不用session的csrf的检测方法呢?
【仔细看了文档,spring也可以将csrf写入cookie里,来做到stateless,CookieCsrfTokenRepository】
考虑到的方法有,写cookie,cookie里面埋入token,并且form里面也埋入hash过的token。服务器端来比较两个token是否一样。这里用到的原理是,第三方网站(比如上面的B)没法获取A的cookie【也是理论上的】,所以B的页面的form里面,也就没法埋入A的cookie了。
http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html
的文档里面,描述了为啥没用CookieCsrf作为默认而用Session作为默认的原因。如果要用session,那么普通的rest也就是有状态了,所有的请求都需要提交csrf字段。
https://www.blogger.com/blogger.g?blogID=8899947124180453470#editor/target=post;postID=327728104436759904
如果cookie泄漏了怎么办?XSS(跨站脚本攻击)手法是可以偷cookie的。
怎么偷,首先,网站得是一个可以运行人发言的网站,比如论坛。A在发言代码里面嵌入javascript,如果网站没有做处理,照本显示,那么B浏览网站时就会执行A嵌入的代码。由于是网站页面自身的script,script就可以拿到B的cookie了,自然也可写script将偷来的cookie发给A。
spring security里面对xss,没有特别的招,就是3个encoding。
1。ouput文字的时候,html encoding
2。 ouput javascript的时候,javascript encoding
3。事件绑定时,handler encoding。
2016年9月21日星期三
spring oauth2,不用config,用xml
http://www.cnblogs.com/tinkerz/p/3759796.html
https://github.com/spring-projects/spring-security-oauth/blob/114fbd44beef0382009f207c08f0b1d9c24e95a9/samples/oauth2/sparklr/src/main/webapp/WEB-INF/spring-servlet.xml
https://github.com/cloudfoundry/uaa/blob/master/samples/api/src/main/webapp/WEB-INF/spring-servlet.xml
http://blog.csdn.net/monkeyking1987/article/details/16828059
http://wwwcomy.iteye.com/blog/2230265
https://gist.github.com/ddewaele/6411612
https://github.com/spring-projects/spring-security-oauth/blob/114fbd44beef0382009f207c08f0b1d9c24e95a9/samples/oauth2/sparklr/src/main/webapp/WEB-INF/spring-servlet.xml
https://github.com/cloudfoundry/uaa/blob/master/samples/api/src/main/webapp/WEB-INF/spring-servlet.xml
http://blog.csdn.net/monkeyking1987/article/details/16828059
http://wwwcomy.iteye.com/blog/2230265
https://gist.github.com/ddewaele/6411612
2016年9月16日星期五
查看进程的运行环境
strings
–a /proc/<pid_of_the_process>/environ
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variables
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variables
2016年9月14日星期三
ftp的文件名乱码
vsftpd的文件上载后乱码,自然,可以设置ftp客户端的设定,设置为utf8,但是这得告诉别人这么去设置,需要找个法子,设置自然而然转码的的功能,查到vsftpd没这个功能,虽然以前有人做了patch,非官方的。
找到了proftpd,
设置UseEncoding UTF-8 CP932 strict,就可以了。
找到了proftpd,
设置UseEncoding UTF-8 CP932 strict,就可以了。
2016年9月5日星期一
org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug
这个一直输出,就算定义了
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger">
<level value="info" />
</logger>
也没用,查了一下,
别人也遇到这个问题,
http://stackoverflow.com/questions/27772563/why-mybatis-force-prints-log4j-debug-info-to-the-console
解决法子是将mapper的logger定义为info就可以。
看BaseJdbcLogger的源码,可以知道里面的log不是自己的,而是构造函数里面传递进去的
protected Log statementLog;
public BaseJdbcLogger(Log log, int queryStack) {
this.statementLog = log;
if (queryStack == 0) {
this.queryStack = 1;
} else {
this.queryStack = queryStack;
}
}
这就是原因了。
这里也碰到一个问题,就是loggername是否支持wildchar的事情
因为我的mapper不是在一个包下,而是在各个repository自己的目录下,比如,没有这样的定义
<logger name="xiu.domain.repository.*.*Mapper">
<level value="info" />
</logger>
找了找,发现logback有filter功能,于是这样来搞
http://logback.qos.ch/manual/filters.html
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>mapper</Name>
<regex>xiu\.domain\.repository\..+\.\w*Mapper</regex>
</matcher>
<expression>mapper.matches(logger)</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger">
<level value="info" />
</logger>
也没用,查了一下,
别人也遇到这个问题,
http://stackoverflow.com/questions/27772563/why-mybatis-force-prints-log4j-debug-info-to-the-console
解决法子是将mapper的logger定义为info就可以。
看BaseJdbcLogger的源码,可以知道里面的log不是自己的,而是构造函数里面传递进去的
protected Log statementLog;
public BaseJdbcLogger(Log log, int queryStack) {
this.statementLog = log;
if (queryStack == 0) {
this.queryStack = 1;
} else {
this.queryStack = queryStack;
}
}
这就是原因了。
这里也碰到一个问题,就是loggername是否支持wildchar的事情
因为我的mapper不是在一个包下,而是在各个repository自己的目录下,比如,没有这样的定义
<logger name="xiu.domain.repository.*.*Mapper">
<level value="info" />
</logger>
找了找,发现logback有filter功能,于是这样来搞
http://logback.qos.ch/manual/filters.html
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>mapper</Name>
<regex>xiu\.domain\.repository\..+\.\w*Mapper</regex>
</matcher>
<expression>mapper.matches(logger)</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
2016年9月3日星期六
2016年8月31日星期三
@Transactional(readOnly=true) 和 @Cache谁优先?
执行下来,目前看到的是@Transaction肯定执行,它比@Cache先跑。
而不是说,先去@Cache里面找,找不到再开始 @Transaction,也就是计算你定义了@Cache,加了@Transaction的地方,仍然会先去拿一个connection,再还回Pool。
实际场景中,@Cache了Service层返回的内容,然后Controller层疯狂call Service,量大时仍然有挤爆max connection的可能。
而不是说,先去@Cache里面找,找不到再开始 @Transaction,也就是计算你定义了@Cache,加了@Transaction的地方,仍然会先去拿一个connection,再还回Pool。
实际场景中,@Cache了Service层返回的内容,然后Controller层疯狂call Service,量大时仍然有挤爆max connection的可能。
https://github.com/arey/java-object-mapper-benchmark
https://github.com/arey/java-object-mapper-benchmark
http://mariusz.wyszomierski.pl/en/mapping-dozer-vs-mapstruct/
http://vytas.io/blog/java/java-object-to-object-mapping-which-framework-to-choose-part-2/
http://stackoverflow.com/questions/34786737/java-mapping-selma-vs-mapstruct/35327974
http://mariusz.wyszomierski.pl/en/mapping-dozer-vs-mapstruct/
http://vytas.io/blog/java/java-object-to-object-mapping-which-framework-to-choose-part-2/
http://stackoverflow.com/questions/34786737/java-mapping-selma-vs-mapstruct/35327974
2016年8月30日星期二
deepclone
// http://howtodoinjava.com/core-java/cloning/a-guide-to-object-cloning-in-java/
// http://stackoverflow.com/questions/2156120/java-recommended-solution-for-deep-cloning-copying-an-instance
测试了几个,不是
// method 1, ok
// List<T> dst = (List<T>)SerializationUtils.clone(ArrayList.class.cast(src)); //too slow
/*
//method 2, ng
List<T> dst = new ArrayList<T>();
CollectionUtils.addAll(dst, new Object[src.size()]);
Collections.copy(dst, src);
*/
/*
//method 3, ng
T[] srcT = toArray(src);
T[] dstT = (T[])Array.newInstance(srcT.getClass().getComponentType(), src.size());
System.arraycopy(srcT, 0, dstT, 0, srcT.length);
List<T> dst = Arrays.asList(dstT);
*/
/*
//method 4, ng, need Clonable
List<T> dst = new ArrayList<T>();
for (T o: src)
{
T cloned = null;
if (o instanceof Cloneable)
{
//cloned = o.clone();
try
{
cloned = (T)(o.getClass().getMethod("clone").invoke(o));
} catch (Exception e)
{
e.printStackTrace();
}
}
else {
cloned = SerializationUtils.clone(o);
}
dst.add(cloned);
}
*/
// method 5, ok
List<T> dst = (List<T>) cloner.deepClone(src);
// http://stackoverflow.com/questions/2156120/java-recommended-solution-for-deep-cloning-copying-an-instance
测试了几个,不是
// method 1, ok
// List<T> dst = (List<T>)SerializationUtils.clone(ArrayList.class.cast(src)); //too slow
/*
//method 2, ng
List<T> dst = new ArrayList<T>();
CollectionUtils.addAll(dst, new Object[src.size()]);
Collections.copy(dst, src);
*/
/*
//method 3, ng
T[] srcT = toArray(src);
T[] dstT = (T[])Array.newInstance(srcT.getClass().getComponentType(), src.size());
System.arraycopy(srcT, 0, dstT, 0, srcT.length);
List<T> dst = Arrays.asList(dstT);
*/
/*
//method 4, ng, need Clonable
List<T> dst = new ArrayList<T>();
for (T o: src)
{
T cloned = null;
if (o instanceof Cloneable)
{
//cloned = o.clone();
try
{
cloned = (T)(o.getClass().getMethod("clone").invoke(o));
} catch (Exception e)
{
e.printStackTrace();
}
}
else {
cloned = SerializationUtils.clone(o);
}
dst.add(cloned);
}
*/
// method 5, ok
List<T> dst = (List<T>) cloner.deepClone(src);
2016年8月28日星期日
使用mybatis的resultmap,将native 的ResultSet变成VO
混用mybatis和native jdbc时,一直考虑能否直接使用定义在mybatis里面定义的resultmap,发愁
了很久。
今天终于找到了方法,旧的版本是不支持的,用了新的3.4.1。
代码如下
@SuppressWarnings("unchecked")
public static <T> List<T> getListFromResultSet(ResultSet rs, String resultMapId) throws SQLException
{
List<Object> l;
Configuration cfg = getSqlSession().getConfiguration();
ResultMap resultMap = cfg.getResultMap(resultMapId);
MappedStatement ms = cfg.getMappedStatements().iterator().next();//get first MappedStatement
DefaultResultSetHandler drsh = new DefaultResultSetHandler(null, ms, null, null, null, null);
ResultSetWrapper rsw = new ResultSetWrapper(rs, cfg);;
DefaultResultHandler resultHandler = new DefaultResultHandler(cfg.getObjectFactory()) {
@Override
public void handleResult(ResultContext<? extends Object> context)
{
super.handleResult(context);
//log.debug("{}", context.getResultObject());
}
};
drsh.handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null);
l = (List<Object>)resultHandler.getResultList();
for (Object o: l)
{
log.debug("{}", o);
}
return (List<T>)(List<?>)l;
}
handleRowValues这个函数,在以前的版本是private的。
参考了下面的url,但是他们都没给出答案
//http://www.codeproject.com/Tips/372152/Mapping-JDBC-ResultSet-to-Object-using-Annotations
//http://resultsetmapper.sourceforge.net
//http://nvry.iteye.com/blog/876076
//http://stackoverflow.com/questions/32756530/how-to-use-mybatis-to-map-values-from-resultset-to-pojo
了很久。
今天终于找到了方法,旧的版本是不支持的,用了新的3.4.1。
代码如下
@SuppressWarnings("unchecked")
public static <T> List<T> getListFromResultSet(ResultSet rs, String resultMapId) throws SQLException
{
List<Object> l;
Configuration cfg = getSqlSession().getConfiguration();
ResultMap resultMap = cfg.getResultMap(resultMapId);
MappedStatement ms = cfg.getMappedStatements().iterator().next();//get first MappedStatement
DefaultResultSetHandler drsh = new DefaultResultSetHandler(null, ms, null, null, null, null);
ResultSetWrapper rsw = new ResultSetWrapper(rs, cfg);;
DefaultResultHandler resultHandler = new DefaultResultHandler(cfg.getObjectFactory()) {
@Override
public void handleResult(ResultContext<? extends Object> context)
{
super.handleResult(context);
//log.debug("{}", context.getResultObject());
}
};
drsh.handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null);
l = (List<Object>)resultHandler.getResultList();
for (Object o: l)
{
log.debug("{}", o);
}
return (List<T>)(List<?>)l;
}
handleRowValues这个函数,在以前的版本是private的。
参考了下面的url,但是他们都没给出答案
//http://www.codeproject.com/Tips/372152/Mapping-JDBC-ResultSet-to-Object-using-Annotations
//http://resultsetmapper.sourceforge.net
//http://nvry.iteye.com/blog/876076
//http://stackoverflow.com/questions/32756530/how-to-use-mybatis-to-map-values-from-resultset-to-pojo
2016年8月24日星期三
spring aop vs aspectj
AspectJ是编译期间修改代码,属于静态编入,不需要代理类。spring aop基于代理的,用的是aopalliance(aopalliance只是一个规范接口,不是实现),是运行期间植入,是动态植入,没自己的代理,得通过cglib或者jdk代理实现。jdk的出发实现了interface的object,缺不能促发没有实现任何interface的object。如果设置了
静态编入 比 动态编入 应该效率好一些。 spring-aop不好用,没有注解,所以搞出来spring-aspects, 靠注解就能搞定,spring-aspects其实和AspectJ没有任何关系,没有用到aspect的实现,只是用了AspectJ的类定义,所以它不是编译植入,而是动态植入,所以也需要代理实现(jdk或者cglib)
<cache:annotation-driven
...
proxy-target-class="true",就可以用cglib去触发。
静态编入 比 动态编入 应该效率好一些。 spring-aop不好用,没有注解,所以搞出来spring-aspects, 靠注解就能搞定,spring-aspects其实和AspectJ没有任何关系,没有用到aspect的实现,只是用了AspectJ的类定义,所以它不是编译植入,而是动态植入,所以也需要代理实现(jdk或者cglib)
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-proxying
这个
proxy-target-class,虽然可以在好几个个地方设置,但是其实只要设置一个地方,就影响到所有,也就是只要一个地方设置为true,那么就都是true。
<aop:config proxy-target-class="true"/><aop:aspectj-autoproxy proxy-target-class="true">
<tx:annotation-driven
proxy-target-class="true"
/>
<task
:annotation-driven
proxy-target-class="true"
/>
<cache:annotation-driven
proxy-target-class="true
/>...
文档是这么写的,既然都是一票定,为啥还要搞一个
ScopedProxyMode?
proxyMode = ScopedProxyMode.TARGET_CLASS还能以bean单位进行的定义?
找了个文章
http://www.udpwork.com/item/15373.html
这个文字的意思
>>这个的答案是,
aspectj虽然是静态,但spring-aspectj还是动态。用了@Aspectj注释的,就算method不是public的,也起作用,就多这么一个好处+可以不xml而可以注解来设置? 如果只是这样,
@Aspectj用处就不算啥了。
2016年8月16日星期二
编译podofo时的错误
无论编译成静态还是动态,都会报
/home/advuser/src/lib/comm/pdf/podofo-src/src/base/PdfMemoryManagement.cpp:133: error: ‘SIZE_MAX’ was not declared in this scope,查看/usr/include/stdint.h的代码,
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
...
# define SIZE_MAX (18446744073709551615UL)
# else
# define SIZE_MAX (4294967295U)
# endif
...
#endif
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
#endif
也就是得先定义__STDC_LIMIT_MACROS再include stdint.h。
那么就修改cmake的podofo_src下面的CMakeLists.txt,追加上
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS")
就OK了。
/home/advuser/src/lib/comm/pdf/podofo-src/src/base/PdfMemoryManagement.cpp:133: error: ‘SIZE_MAX’ was not declared in this scope,查看/usr/include/stdint.h的代码,
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
...
# define SIZE_MAX (18446744073709551615UL)
# else
# define SIZE_MAX (4294967295U)
# endif
...
#endif
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
#endif
也就是得先定义__STDC_LIMIT_MACROS再include stdint.h。
那么就修改cmake的podofo_src下面的CMakeLists.txt,追加上
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS")
就OK了。
2016年8月14日星期日
typescript 2.0
https://zhongsp.gitbooks.io/typescript-handbook/content/doc/handbook/tutorials/ASP.NET%20Core.html
https://zhuanlan.zhihu.com/p/21629069
https://zhuanlan.zhihu.com/p/21629069
2016年8月7日星期日
sa弄长些,弄频繁些
默认是是10分钟一采集
# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=7
把7修改为27就可以
cat /etc/cron.d/sysstat
*/10 * * * * root /usr/lib64/sa/sa1 1 1
把10修改为1,就变成一分钟了。
默认是保留7天,
cat
/etc/sysconfig/sysstat# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=7
把7修改为27就可以
2016年8月4日星期四
2016年8月3日星期三
why react
https://medium.freecodecamp.com/angular-2-versus-react-there-will-be-blood-66595faafd51#.fqz71jrb6
2016年8月1日星期一
oracle的并行查询
parallel_server不是并行查询用的,是给RAC用的,和并行查询没有一毛钱关系,这个糊涂了一下。
一般下面几个参数调节,hint里面的并行是会起作用的,就算table自身没有并行。
parallel_degree_policy
parallel_max_servers
parallel_min_servers
parallel_servers_target
测试如下
1.先disable并行
ALTER TABLE SKADVUSER.AD_ORDER_LEADINFO NOPARALLEL;
2 SELECT * FROM AD_ORDER,看计划,没有PX msg pool相关的东西。
3. select /*+ parallel(o 2) */ * from ad_order o,看机会,有了px。
还有个法子,就是直接enable session的并行,
alter session force parallel query;
不要并行
用no_parallel,或者直接将 parallel_max_servers设置为0。
parallel_degree_polic默认是manual,所以,如果表设置了并行,还是会并行。
http://m.blog.itpub.net/9240380/viewspace-1806660/
http://oracleinaction.com/statement-queueing/
http://blog.csdn.net/tianlesoftware/article/details/5854583
一般下面几个参数调节,hint里面的并行是会起作用的,就算table自身没有并行。
parallel_degree_policy
parallel_max_servers
parallel_min_servers
parallel_servers_target
测试如下
1.先disable并行
ALTER TABLE SKADVUSER.AD_ORDER_LEADINFO NOPARALLEL;
2 SELECT * FROM AD_ORDER,看计划,没有PX msg pool相关的东西。
3. select /*+ parallel(o 2) */ * from ad_order o,看机会,有了px。
还有个法子,就是直接enable session的并行,
alter session force parallel query;
不要并行
用no_parallel,或者直接将 parallel_max_servers设置为0。
parallel_degree_polic默认是manual,所以,如果表设置了并行,还是会并行。
http://m.blog.itpub.net/9240380/viewspace-1806660/
http://oracleinaction.com/statement-queueing/
http://blog.csdn.net/tianlesoftware/article/details/5854583
2016年7月26日星期二
proc的pc里面,注释里面不要放引号
比如
// if zhangshan's xxx
这样的注释,编译老报莫名其妙的错误
PCC-S-02010, found end-of-file while scanning string literal
Error at line 0, column 0 in file transtp1.pc
PCC-F-02102, Fatal error while doing C preprocessing
// if zhangshan's xxx
这样的注释,编译老报莫名其妙的错误
PCC-S-02010, found end-of-file while scanning string literal
Error at line 0, column 0 in file transtp1.pc
PCC-F-02102, Fatal error while doing C preprocessing
2016年7月11日星期一
rhel dmesg加上时间
http://gabrieleg.altervista.org/enabling-timestamps-for-dmesg-kernel-ring-buffer/
临时的,只需要执行
echo Y > /sys/module/printk/parameters/time
就可以
永久的,
可以修改/boot/grub/grub.conf
追加上printk.time=1,注意等号两边不要与空格。
这样dmesg的前面就有了Unix Timestamp,要转换为我们可以读取的,还需要转换一下。
https://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable
https://gist.github.com/saghul/542780
临时的,只需要执行
echo Y > /sys/module/printk/parameters/time
就可以
永久的,
可以修改/boot/grub/grub.conf
追加上printk.time=1,注意等号两边不要与空格。
这样dmesg的前面就有了Unix Timestamp,要转换为我们可以读取的,还需要转换一下。
https://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable
https://gist.github.com/saghul/542780
2016年5月20日星期五
system cpu high
今天又9:20~9:38发生了 system cpu占用很高的情况,逮到100%的core,看到进程基本都堵在了_spin_lock_irq的系统调用。根据这个_spin_lock_irq,外加system cpu搞,google到了。 rhel 6.3里的内核参数, vm.zone_reclaim_mode目前1,需要修改为0,在减少这个现象。
vm.zone_reclaim_mode=1,表示即宁肯回收自己zone的page cache,也不去申请其它zone的free pages
vm.zone_reclaim_mode=0,表示只要其它zone有free pages就去其它zone里申请
参考了网站
http://blog.phpdba.com/post/473
http://mogu.io/156-156
http://eratostennis.hatenablog.com/entry/2015/12/12/201319
http://www.databasesoup.com/2012/08/wrong-defaults-for-zonereclaimmode-on.html
http://blog.etsukata.com/2015/09/hadoop-cpu-system-zonereclaimmode-1.html
vm.zone_reclaim_mode=1,表示即宁肯回收自己zone的page cache,也不去申请其它zone的free pages
vm.zone_reclaim_mode=0,表示只要其它zone有free pages就去其它zone里申请
# sysctl -a | grep zone_reclaim_mode
vm.zone_reclaim_mode = 0
# sysctl -w vm.zone_reclaim_mode=1
vm.zone_reclaim_mode = 1
参考了网站
http://blog.phpdba.com/post/473
http://mogu.io/156-156
http://eratostennis.hatenablog.com/entry/2015/12/12/201319
http://www.databasesoup.com/2012/08/wrong-defaults-for-zonereclaimmode-on.html
http://blog.etsukata.com/2015/09/hadoop-cpu-system-zonereclaimmode-1.html
2016年5月6日星期五
tomcat gzip enable
https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#HTTP/1.1_and_HTTP/1.0_Support
$CATALINA_HOME/conf/server.xml を以下の様に設定する。
$CATALINA_HOME/conf/server.xml を以下の様に設定する。
<Server port="8005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" compression="on"/> </Server>
2016年4月29日星期五
SecureFX文件名乱码的解决
连接到aws的ec2服务器,sftp却是乱码,折腾了时间。
修改法子为,修改securefx的session 配置文件的
D:"Filenames Always Use UTF8"=00000000
为 00000001,表示一直使用utf8,不要是作用本地的编码。
修改法子为,修改securefx的session 配置文件的
D:"Filenames Always Use UTF8"=00000000
为 00000001,表示一直使用utf8,不要是作用本地的编码。
2016年4月22日星期五
windows 10用久了关机关不下来
开机,用上1个小时,关机,没问题,可以彻底关掉。
开机,用上1天,关机,一直关不下去。
解决法子,将默认的Intel Management Engine Interface是11,降级到9.5就可以了。只是去掉mei的电源睡眠,也好像不管用。
开机,用上1天,关机,一直关不下去。
解决法子,将默认的Intel Management Engine Interface是11,降级到9.5就可以了。只是去掉mei的电源睡眠,也好像不管用。
2016年4月17日星期日
2016年4月8日星期五
2016年4月4日星期一
老话题,Ioc和DI啥区别
概念问题,一直觉得差不多
别人一问,也说不清差别
查一下
能明确下来,https://blog.tonyseek.com/post/notes-about-ioc-and-di/
IoC是目的,就是为了控制反转,DI是手段,是实现控制反转的手段
别人一问,也说不清差别
查一下
能明确下来,https://blog.tonyseek.com/post/notes-about-ioc-and-di/
IoC是目的,就是为了控制反转,DI是手段,是实现控制反转的手段
2016年4月1日星期五
centos7里面tomcat要跑80,非root用户
其实很简单,直接将80的请求,转发到8080就完事了
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
压缩js时出现的问题
非压缩时,跑得好好的,压缩后,angualr的inject就不好使了,这种问题有时候真的很头痛,这也是angular的难搞的地方,到底哪个注入失败,看不出来。
追代码
发现
如果我注视掉
明白了原因 ,就想到如何修改这个,
自然,注入了就要使用时到时最好,有没有别的法子来对付呢,我还得继续查查
https://github.com/mishoo/UglifyJS2
仔细看了Compressor options
没发现这样的参数可以对付这个情况
没法子,那就如何对付,我最后弄成这样的
line 98 col 16 Unnecessary semicolon.
于是我disable掉这个警告,大功告成,当然这个我只是用在app.config.es6里面
追代码
发现
function configAngular($compileProvider) { 'ngInject'; $compileProvider.debugInfoEnabled(true); }这样是没问题的
如果我注视掉
function configAngular($compileProvider) { 'ngInject'; //$compileProvider.debugInfoEnabled(true); }这样就有问题了,产生的js代码里,这个函数没有t.$inject这样的东西,uglify太聪明了,他认为这个函数是个空函数(啥也没干),就删掉了ngAnnotate产生的注入代码
configAngular.$inject = ["$compileProvider"];了,虽然是个空函数,该注入的还是要注入啊,然后angular的函数有参数,却没有$inject,报错咯
明白了原因 ,就想到如何修改这个,
自然,注入了就要使用时到时最好,有没有别的法子来对付呢,我还得继续查查
https://github.com/mishoo/UglifyJS2
仔细看了Compressor options
没发现这样的参数可以对付这个情况
没法子,那就如何对付,我最后弄成这样的
function configAngular($compileProvider) { 'ngInject';;
//$compileProvider.debugInfoEnabled(true); }这样jshint会包一个警告,也就是ngInject后面多一个逗号
line 98 col 16 Unnecessary semicolon.
于是我disable掉这个警告,大功告成,当然这个我只是用在app.config.es6里面
/* jshint -W032 */
2016年3月31日星期四
开发机11g的空间不够了,试着删了一下
开发机11g的空间不够了,得腾点空间来,想shrink表空,可是系统一直跑着,
先想到的是temp,我先add了一个datafile进temp后
ALTER DATABASE TEMPFILE '/ORADATA/sysdata/NKV2DDB/temp01.dbf' online
ALTER DATABASE TEMPFILE '/ORADATA/sysdata/NKV2DDB/temp01.dbf' DROP INCLUDING DATAFILES
第二部是会报错,系统又不能停,得找别的地方腾空间了。
在想搞undo,发现undo已经不在快满的分区 。
后来发现diag下面有太多的incident,空间还不少,于是就在这里下手了。
[oracle@NKV2DEVDB omdata]$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Thu Mar 31 18:41:58 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/ORADATA/app"
adrci> show homepath
ADR Homes:
diag/tnslsnr/NKV2DEVDB/listener
diag/rdbms/nkv2ddb/NKV2DDB
diag/rdbms/dup/dup
adrci> show incident
这里输出太多了
adrci> purge -age 14400 -type incident
DIA-48448: This command does not support multiple ADR homes
还不让我做
adrci> set homepath diag/rdbms/nkv2ddb/NKV2DDB
adrci> show control
看一下
adrci> purge -age 14400 -type incident
这下ok了,删掉了很多。
adrci> purge -age 14400 -type TRACE
顺便也干掉了TRACE
adrci> set control (SHORTP_POLICY = 240),这是小时单位,1天
adrci> set control (LONGP_POLICY = 1095),1个半月
adrci> purge
空间有了
先想到的是temp,我先add了一个datafile进temp后
ALTER DATABASE TEMPFILE '/ORADATA/sysdata/NKV2DDB/temp01.dbf' online
ALTER DATABASE TEMPFILE '/ORADATA/sysdata/NKV2DDB/temp01.dbf' DROP INCLUDING DATAFILES
第二部是会报错,系统又不能停,得找别的地方腾空间了。
在想搞undo,发现undo已经不在快满的分区 。
后来发现diag下面有太多的incident,空间还不少,于是就在这里下手了。
[oracle@NKV2DEVDB omdata]$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Thu Mar 31 18:41:58 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/ORADATA/app"
adrci> show homepath
ADR Homes:
diag/tnslsnr/NKV2DEVDB/listener
diag/rdbms/nkv2ddb/NKV2DDB
diag/rdbms/dup/dup
adrci> show incident
这里输出太多了
adrci> purge -age 14400 -type incident
DIA-48448: This command does not support multiple ADR homes
还不让我做
adrci> set homepath diag/rdbms/nkv2ddb/NKV2DDB
adrci> show control
看一下
adrci> purge -age 14400 -type incident
这下ok了,删掉了很多。
adrci> purge -age 14400 -type TRACE
顺便也干掉了TRACE
adrci> set control (SHORTP_POLICY = 240),这是小时单位,1天
adrci> set control (LONGP_POLICY = 1095),1个半月
adrci> purge
空间有了
2016年3月25日星期五
一台老机器,DL360 G5,不能从dvdrom启动
一台老机器,DL360 G5,打算用来做dmz,重做机器时,发现却不能从dvdrom启动。
一查,很多人都在问这个,却没有人提出解决法子
方法一说,可以将SmartArray的逻辑盘删掉就可以,测试了几次,都一样,还是不行
http://d.hatena.ne.jp/showten/20040809
方法二说,需要回退bios,咋回退哦
http://community.hpe.com/t5/ProLiant-Servers-ML-DL-SL/DL360-G5-Won-t-boot-from-a-CD-listed-as-1-in-IPL/td-p/4218249
我试着做了一个usb的启动盘,再删掉了smartarray的逻辑盘,再reset bios to default,居然可以了。
一查,很多人都在问这个,却没有人提出解决法子
方法一说,可以将SmartArray的逻辑盘删掉就可以,测试了几次,都一样,还是不行
http://d.hatena.ne.jp/showten/20040809
方法二说,需要回退bios,咋回退哦
http://community.hpe.com/t5/ProLiant-Servers-ML-DL-SL/DL360-G5-Won-t-boot-from-a-CD-listed-as-1-in-IPL/td-p/4218249
我试着做了一个usb的启动盘,再删掉了smartarray的逻辑盘,再reset bios to default,居然可以了。
2016年3月19日星期六
babel6里面,ie9,ie10的super不执行?
运气差,遇到了这个bug,babel5是ok的,一查,的确有
https://github.com/babel/babelify/issues/133
目前,我是用下面的法子解决的
https://github.com/babel/babelify/issues/133
目前,我是用下面的法子解决的
{
"presets": ["es2015"],
"plugins": [
"transform-es2015-modules-amd",
['transform-es2015-classes', {loose: true}]
]
}
2016年3月6日星期日
64bit data type
http://docwiki.embarcadero.com/RADStudio/Seattle/en/64-bit_Windows_Data_Types_Compared_to_32-bit_Windows_Data_Types
2016年3月4日星期五
放了OTL,还是用Delphi自己的的PPL吧
偶尔写个小程序,发现OTL http://otl.17slon.com/index.htm 已经不更新很久,用回XE以来自带的PPL,发现也不错,思维好像还和OTL还一样
http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_the_Parallel_Programming_Library
http://chee-yang.blogspot.jp/2015/12/delphi-multi-threading_4.html
http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_the_Parallel_Programming_Library
http://chee-yang.blogspot.jp/2015/12/delphi-multi-threading_4.html
2016年2月29日星期一
linux 6.3 一直不产生core,怎么设置都没用
# vi /etc/security/limits.conf
…
#* soft core 0
* soft core unlimited
…
# vi /etc/sysctl.conf
…
kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t
fs.suid_dumpable = 2
…
Note:
%e is the filename
%g is the gid the processs was running under
%p is the pid of the process
%s is the signal that caused the dump
%t is the time the dump occurred
%u is the uid the process was running under
# vi /etc/sysconfig/init
…
DAEMON_COREFILE_LIMIT=’unlimited’
…
# sysctl -p
以上都作了,还是不行。
进一步,我
https://www.stigviewer.com/stig/red_hat_enterprise_linux_6/2015-03-06/finding/V-38640
disable 的abrtd,还是没出来。
…
#* soft core 0
* soft core unlimited
…
# vi /etc/sysctl.conf
…
kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t
fs.suid_dumpable = 2
…
Note:
%e is the filename
%g is the gid the processs was running under
%p is the pid of the process
%s is the signal that caused the dump
%t is the time the dump occurred
%u is the uid the process was running under
# vi /etc/sysconfig/init
…
DAEMON_COREFILE_LIMIT=’unlimited’
…
# sysctl -p
以上都作了,还是不行。
进一步,我
https://www.stigviewer.com/stig/red_hat_enterprise_linux_6/2015-03-06/finding/V-38640
disable 的abrtd,还是没出来。
2016年2月22日星期一
在IE9,IE10里面,babel编译的类,构造函数父类不被执行
在IE9,IE10里面,babel编译的类,父类不被执行,也就是super()没进去,查了几个小时,发现是
babel编译类,依赖 __proto__
http://ricostacruz.com/til/babel-ie-class-inheritance.html
https://babeljs.algolia.com/docs/advanced/transformers/spec/proto-to-assign/
但是我没找到如何传递这个参数进gulp-babel
放哪都是Unknown option: base.optional,.babelrc.optional
搞定,用这个
http://babeljs.io/docs/plugins/transform-es2015-object-super/
babel编译类,依赖 __proto__
http://ricostacruz.com/til/babel-ie-class-inheritance.html
https://babeljs.algolia.com/docs/advanced/transformers/spec/proto-to-assign/
但是我没找到如何传递这个参数进gulp-babel
放哪都是Unknown option: base.optional,.babelrc.optional
.pipe($.babel({optional: ['spec.protoToAssign']})).on('error', conf.errorHandler('Babel'))
不行
放.babelrc里面
"optional": ["spec.protoToAssign"]
都不认
咋搞
搞定,用这个
http://babeljs.io/docs/plugins/transform-es2015-object-super/
"plugins": ["transform-es2015-modules-amd", "transform-es2015-object-super"]
2016年2月15日星期一
郁闷,真是郁闷,查了半天问题,才发现是ocLazyLoad和ng injector不搭配
ng injector在调试angular时的确是非常好用,最近用到了ocLazyLoad,老把angular的模块统统再次reload一遍,导致动态加载mod失败,追了大半天ocLazyLoad代码才发现ng injector的缘故。因为ocLazyLoad拦截angualr的函数后,只打算bootstap一回,ng injector也进了被拦截的函数里,导致问题所在。
解决法子,用了ocLazyLoad的地方,就disable掉ng injector插件。
解决法子,用了ocLazyLoad的地方,就disable掉ng injector插件。
2016年2月12日星期五
ie11突然啥地址也访问不了了
基本我也就用ie看兼容性,突然啥都访问不了了,输入url没反应,但是用管理员模式却没啥问题。
开始以为是毛豆防火墙导致,禁止了还是一样。重新reset ie11所有设置仍然一样,没解决。
后来发现是 由于ie的保护模式,去掉勾勾就可以。
http://answers.microsoft.com/en-us/ie/forum/ie10-windows_7/internet-explorer-10-works-only-in-administrator/f369671b-f8aa-403d-810c-5e8cd18b0ef8?auth=1
这个保护模式到底保护啥了?
找了文档看了
https://msdn.microsoft.com/en-us/library/bb250462%28v=vs.85%29.aspx#upm_undpm
开始以为是毛豆防火墙导致,禁止了还是一样。重新reset ie11所有设置仍然一样,没解决。
后来发现是 由于ie的保护模式,去掉勾勾就可以。
http://answers.microsoft.com/en-us/ie/forum/ie10-windows_7/internet-explorer-10-works-only-in-administrator/f369671b-f8aa-403d-810c-5e8cd18b0ef8?auth=1
这个保护模式到底保护啥了?
找了文档看了
https://msdn.microsoft.com/en-us/library/bb250462%28v=vs.85%29.aspx#upm_undpm
Understanding Protected Mode
https://www.microsoft.com/china/msdn/library/webservices/WebApp/ProtectedMode.mspx?mfr=true
Office Outlook2013突然启动不了了,一直在 「処理中」状態から進みません。
不知道为啥,突然就这样了,由于我修改了windows的登录密码,想起mac的修改密码会导致一堆chain的问题,我还专门去控制面板里面找到 email的设定,重新做了一个profile,还是不行。
后来动搞西搞,又怀疑到是不是我切换笔记本显卡的缘故,
注册表,追加上
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics\
DisableHardwareAcceleration DWORD 1
居然启动起来了
后来动搞西搞,又怀疑到是不是我切换笔记本显卡的缘故,
注册表,追加上
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics\
DisableHardwareAcceleration DWORD 1
居然启动起来了
2016年2月4日星期四
12c的pdb,jdbc 1.4连不上的解决方法
修改sqlnet.ora
设置上
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8就可以了。
http://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2010
设置上
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8就可以了。
http://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2010
2016年1月28日星期四
form, component
控件
* @property {Object} $error An object hash with all failing validator ids as keys.
* @property {Object} $pending An object hash with all pending validator ids as keys.
*
* @property {boolean} $untouched True if control has not lost focus yet.没摸过
* @property {boolean} $touched True if control has lost focus.摸过,并失去了。
* @property {boolean} $pristine Truerol if user has not interacted with the cont yet.没交互过
* @property {boolean} $dirty True if user has already interacted with the control.交互过
* @property {boolean} $valid True if there is no error.合法
* @property {boolean} $invalid True if at least one error on the control.非法
* @property {string} $name The name attribute of the control.
form
* @property {boolean} $pristine True if user has not interacted with the form yet.没交互
* @property {boolean} $dirty True if user has already interacted with the form.已交互
* @property {boolean} $valid True if all of the containing forms and controls are valid.合法
* @property {boolean} $invalid True if at least one containing control or form is invalid.非法
* @property {boolean} $submitted True if user has submitted the form even if its invalid.已提交,就算没提交成功也是已提交。
区分一下
$dirty和$pristine是相反的
$dirty是交互过,比如获得了焦点,并且输入了东西(比如输入A,然后删掉A)。
$touched只是获得过焦点。
2016年1月27日星期三
2016年1月26日星期二
做了一个dmz,用了selinux,比起没用selinux一堆麻烦
1。apache启动时,没法监听端口。
[root@dmz conf]# service httpd start
(13)Permission denied: make_sock: could not bind to address [::]:8085
这是因为selinux没有让8085运行。
semanage port -l命令可以看到,默认是
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
需要追加上我的8085
semanage port -a -t http_port_t -p tcp 8085
追加上后,ok。
另外,rhel 6l里,默认semanage是没安装的。需要yum -y install policycoreutils-python
可以用
但是奇怪的是tomcat缺可以启动监听其他端口,不需要selinux,原因不知道,估计和用户所属组有关。
[root@dmz conf]# service httpd start
(13)Permission denied: make_sock: could not bind to address [::]:8085
这是因为selinux没有让8085运行。
semanage port -l命令可以看到,默认是
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
需要追加上我的8085
semanage port -a -t http_port_t -p tcp 8085
追加上后,ok。
另外,rhel 6l里,默认semanage是没安装的。需要yum -y install policycoreutils-python
可以用
yum whatprovides /usr/sbin/semanage找到哪个包里有这个命令。
但是奇怪的是tomcat缺可以启动监听其他端口,不需要selinux,原因不知道,估计和用户所属组有关。
2.反向代理没法用
[Tue Jan 26 16:51:41 2016] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 192.168.101.41:8080 (192.168.101.41) failed
[Tue Jan 26 16:51:41 2016] [error] ap_proxy_connect_backend disabling worker for (192.168.101.41)
需要执行
/usr/sbin/setsebool -P httpd_can_network_connect 1
才可以。
2016年1月20日星期三
非root用户执行crontab时的环境变量
crontab -e,编辑完后,以为会按照指定的执行,结果发现crontab 执行虽然是以用户权限执行的,但是用户的环境根本没加载。
解决法子
1。最笨自然是用root用户里面crontab 然后 su - user -c "script.sh"咯
2。其实写script的时候,最前面加上-l就可以啦,#!/bin/bash -l这样子。也可以放job前面
* * * * * bash -l script.sh
3。要不然就是job的前面,加载也可以 . ~/.bash_profile;script.sh
解决法子
1。最笨自然是用root用户里面crontab 然后 su - user -c "script.sh"咯
2。其实写script的时候,最前面加上-l就可以啦,#!/bin/bash -l这样子。也可以放job前面
* * * * * bash -l script.sh
3。要不然就是job的前面,加载也可以 . ~/.bash_profile;script.sh
2016年1月19日星期二
Invalid password while logging 12c ASM instance
12c的grid里
sqlplus / as sysdb ok
sqlplus / as sysasm ok
sqlplus sys/sys_pw as sysdba ok
sqlplus sys/sys_pw as sysasm NG
解决法子在这里
http://www.sqlplus.ca/blog/?p=1142
[grid@orasrv ~]$ ls -l $ORACLE_HOME/dbs
total 12
-rw-rw----. 1 grid oinstall 1328 Jan 19 15:41 ab_+ASM.dat
-rw-rw----. 1 grid oinstall 1544 Jan 19 15:41 hc_+ASM.dat
-rw-r--r--. 1 grid oinstall 2992 Feb 3 2012 init.ora
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE TRUE FALSE FALSE FALSE 0
ASMSNMP TRUE FALSE FALSE FALSE FALSE FALSE 0
[grid@orasrv ~]$ srvctl config asm -a
ASM home: <CRS home>
Password file: +DG_GRID/orapwasm
ASM listener: LISTENERASM
Spfile: +DG_GRID/ASM/ASMPARAMETERFILE/REGISTRY.253.865375963
ASM diskgroup discovery string: /dev/raw/*
ASM is enabled.
ASM is individually enabled on nodes:
ASM is individually disabled on nodes:
我的orapwasm缺是有的。sys也已经有了 SYSAS =true,想不通。
后来,connect / as sysasm后修改sys密码,alter user sys identified by oracle居然过了。
莫非asm实例的sys密码还有两份?一份给sysdba一份给sysasm?莫名其妙。
sqlplus / as sysdb ok
sqlplus / as sysasm ok
sqlplus sys/sys_pw as sysdba ok
sqlplus sys/sys_pw as sysasm NG
解决法子在这里
http://www.sqlplus.ca/blog/?p=1142
[grid@orasrv ~]$ ls -l $ORACLE_HOME/dbs
total 12
-rw-rw----. 1 grid oinstall 1328 Jan 19 15:41 ab_+ASM.dat
-rw-rw----. 1 grid oinstall 1544 Jan 19 15:41 hc_+ASM.dat
-rw-r--r--. 1 grid oinstall 2992 Feb 3 2012 init.ora
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS TRUE TRUE TRUE FALSE FALSE FALSE 0
ASMSNMP TRUE FALSE FALSE FALSE FALSE FALSE 0
[grid@orasrv ~]$ srvctl config asm -a
ASM home: <CRS home>
Password file: +DG_GRID/orapwasm
ASM listener: LISTENERASM
Spfile: +DG_GRID/ASM/ASMPARAMETERFILE/REGISTRY.253.865375963
ASM diskgroup discovery string: /dev/raw/*
ASM is enabled.
ASM is individually enabled on nodes:
ASM is individually disabled on nodes:
我的orapwasm缺是有的。sys也已经有了 SYSAS =true,想不通。
后来,connect / as sysasm后修改sys密码,alter user sys identified by oracle居然过了。
莫非asm实例的sys密码还有两份?一份给sysdba一份给sysasm?莫名其妙。
订阅:
博文 (Atom)