冯东的博客

每天学一点,不断进取
posts - 75, comments - 268, trackbacks - 7, articles - 4
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

2008年9月19日

Oracle10G可以采用下面的方法
connect system as sysdba ;
shutdown immediate ;
startup mount ;
alter system enable restricted session ; 
alter system set JOB_QUEUE_PROCESSES=0
alter system set AQ_TM_PROCESSES=0
alter database open ; 
alter database character set internal_use ZHS16GBK ; 
shutdown immediate ;
startup ;

老版本可以参考

STARTUP MOUNT; 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0
ALTER SYSTEM SET AQ_TM_PROCESSES=0
ALTER DATABASE OPEN
ALTER DATABASE CHARACTER SET ZHS16GBK; 
ALTER DATABASE national CHARACTER SET ZHS16GBK; 
SHUTDOWN IMMEDIATE; 
STARTUP; 



之所以改字符集是因为我昨天装了Cognos但是服务死活起不来,在网上查了一下,说是Oracle字符集的事,用UTF-8就没问题,改成UTF8了还是报错,发现一个能够起来的服务是用AL32UTF8这个字符集就能起来,我把本地的oracle字符集又改成了AL32UTF8可是还是起不来,后来同事说通过修改字符集不行,必须是创建数据库的时候就指定字符集!晕死。

注:Al32UTF8 支持更高版本的Unicode(3.1) 而且, AL32UTF8只支持9i以及更高版本的数据库,UTF8既可以作为数据库字符集,也可以作为国家字符集(9i),AL32UTF8只能作为数据库字符集

 

posted @ 2008-09-19 14:48 冯东 阅读(96) | 评论 (1)编辑

2008年9月8日

    经常会遇到这样的情况,用SQL读取一些数据,然后根据数据进行一些处理。比如学生的学号是依次递增的,通常会用下面的方法来取得并生成一个学号
select max(sno) as sno from students;
程序取得sno然后插入
insert into students values(sno+1,...);
这种方法平时可能没有问题,但是存在这样一种情况A、B两个用户几乎同一时间操作,A先执行了select max(sno) 操作,在A取得最大学号但没有完成插入或者提骄傲操作时B也执行了select max(sno) 操作,此时A、B取到的 sno是一样的。但是这种情况是不允许出现的,怎样避免这种情况呢?
对选中的行上锁!
针对上面的sql语句需要小的改动
select sno from students sno=(select max(sno) from students) fro update;
这时Oracle将会锁定选中的行,如果没有commit活rollback操作的话,在他后面执行的语句将会陷入等待状态。这样就可以解决类似上面的问题了。A先执行了select max(sno) 操作,在A取得最大学号但没有完成插入或者提骄傲操作时B也执行了select max(sno) 操作,因为这一行被加上了串行锁,所以B用户只好等待,等A用户执行了commit操作,B用户才有返回结果,这样一来就避免了取得同一个值的问题。

posted @ 2008-09-08 14:52 冯东 阅读(113) | 评论 (0)编辑

2008年9月5日

今天去了个公司笔试,其中有个题是这样的tab1表中有Id和phone两个字段,其中ID是主键,phone字段中有很多重复的记录,写一条sql语句删除重复的记录当时写的不对,后来问了问同事,同事跟我说这个是笔试中经常会遇到的问题,看来自己还是面试的不多啊,呵呵,正确的语句应该是这样的
显示结果
后来同事又跟我说了说oracle中的递归,这个东西是我以前没有接触过的,适合树形结果,有类似parendID字段的查询 start with 从哪开始 connect by prior 递归条件
例如
select a.id,a.name from tab1 a start with a.id='1' connect by piror a.id=b.parentid;
大家可以试着创建个表,查询一下

posted @ 2008-09-05 17:24 冯东 阅读(885) | 评论 (11)编辑

2008年8月22日

   来北京已经一年多了,但是不算北漂。因为是出差,公司提供住宿所以没有“漂”的感觉。快离职了,“漂”的感觉油然而生,房子要找,工作要找,未知的房子和我未知的公司距离多远我也不知道。享受惯了每天早上走着上班的惬意我真的难以想象每天早上挤公交车挤地铁上班的日子,也许我真的应该为了能挤上公交车而减肥了。
   说实话,这一年我真的学了不少东西,自然编程能力提升了不少,捎带脚的我的Oracle和Linux也有了不少突破,但是简历确是让我很头痛,真的是不知道改如何写,其实我是想换个DBA或者系统管理员这类职位,但是总搁不下编程,而且这类职位要求偏高,如果我按照实际情况写简历的话基本是没有面试的希望,虽然没有真正的DBA经验,说实话我还是对我自己很有信心的。^_^
   拜拜了,可以报销的车票,拜拜了,走着上班的日子,拜拜了,我的第一份工作。
   Come On!拥挤的公交车!Come On!未知的距离!Come On,我的第二份工作。

posted @ 2008-08-22 23:13 冯东 阅读(118) | 评论 (1)编辑

2008年7月25日

Linux中修改系统服务的命令是chkconfig (check config),命令的详细解释如下:
chkconfig

功能说明:检查,设置系统的各种服务。

语  法:chkconfig [
--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

补充说明:这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

参  数:
 
--add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。 
 
--del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。 
 
--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕 


首先来执行 chkconfig --list命令来查看所有已添加的系统服务(下面的结果只是一部分)

[root@fd init.d]# chkconfig --list
diskdump        0:off   1:off   2:off   3:off   4:off   5:off   6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
rhnsd           0:off   1:off   2:off   3:on    4:on    5:on    6:off
cups-config-daemon      0:off   1:off   2:off   3:on    4:on    5:on    6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
microcode_ctl   0:off   1:off   2:on    3:on    4:on    5:on    6:off
netplugd        0:off   1:off   2:off   3:off   4:off   5:off   6:off
netdump         0:off   1:off   2:off   3:off   4:off   5:off   6:off
cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
smb             0:off   1:off   2:off   3:off   4:off   5:off   6:off
ntpd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
rawdevices      0:off   1:off   2:off   3:on    4:on    5:on    6:off
psacct          0:off   1:off   2:off   3:off   4:off   5:off   6:off
vncserver       0:off   1:off   2:off   3:off   4:off   5:off   6:off
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
dc_server       0:off   1:off   2:off   3:off   4:off   5:off   6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
ibmasm          0:off   1:off   2:off   3:off   4:off   5:off   6:off
dc_client       0:off   1:off   2:off   3:off   4:off   5:off   6:off


其中第一列表示服务名,后面的0-6表示在这六种启动方式中该服务是启动(on)还是关闭(off)
比如默认情况下,自动检测新硬件的服务是启动的(服务名是kudzu),每次启动需要检测一段时间,我们可以关闭服务,以后有了硬件改动在调用它。
chkconfig kudzu off

chkconfig --list kudzu
kudzu           0:off   1:off   2:off   3:off   4:off   5:off   6:off
可以看到检测新硬件的服务都被关闭了,再次启动时就不会检测新硬件了。如果有了硬件改动你可以选择将此服务打开(chkconfig kudzu on),其实有更简单的方法,输入
service kudzu start
手动启动检测新硬件服务就可以了。这些服务都存放在/etc/init.d目录下,他们都是可执行的shell文件,比如刚才用的检测新硬件服务
[root@fd /]# ls -l /etc/init.d/kudzu
-rwxr-xr-x  1 root root 2095 Aug 23  2005 /etc/init.d/kudzu
其实我们编写的shell文件也可以放在这里,然后添加成系统服务,但是我们必须遵守一个简单的预定。我们先来看看kudzu的具体内容吧
根据这个模式编写一个简单的启动tomcat的服务脚本,vi /etc/init.d/tomcat,内容如下

[root@fd /]# cat /etc/init.d/kudzu
#!/bin/bash
#
# kudzu         This scripts runs the kudzu hardware probe.
#
# chkconfig: 345 05 95
# description:  This runs the hardware probe, and optionally configures \
#               changed hardware.

# This is an interactive program, we need the current locale
具体内容省略


 

# chkconfig: 2345 20 80
# description: simple example to start tomcat

export JAVA_HOME=/usr/java/jdk1.5.0_16
export CLASS_PATH=/usr/java/jdk1.5.0_16/lib
export PATH=$JAVA_HOME/bin:$PATH
/usr/Tomcat/bin/startup.sh

将tomcat添加到服务中
chkconfig --add tomcat
状态设为启动
chkconfig tomcat on

        在tomcat文件的头几行的注释语句中,必须包含chkconfig和description两部分内容,否则在执行“chkconfig --add tomcat”时,会出现“tomcat服务不支持chkconfig”的错误提示。chkconfig这行表示缺省启动的运行级别以及启动和停止的优先级,如该服务缺省不再任何运行级启动,则以 - 代替运行级别。在tomcat中表示脚本在运行级2、3、4、5启动,启动优先权为20(优先权数越大服务启动的越晚),停止优先权为80。如果服务已经设置好了,那么通过编辑tomcat文件来修改启动优先权就不管用了,先删除服务再添加进来就可以了。
        我模仿检测新硬件服务的内容编写一个较为复杂的tomcat服务,在系统启动时启动tomcat,在系统关闭时关闭tomcat。内容如下

# chkconfig: 2345 30 70 
# description: Starts and Stops Tomcat.

export JAVA_HOME=/usr/java/jdk1.5.0_16
export CLASS_PATH=/usr/java/jdk1.5.0_16/lib
export PATH=$JAVA_HOME/bin:$PATH

case "$1" in
 start)
 /usr/Tomcat/bin/startup.sh
 touch /var/lock/subsys/tomcat
 ;;
 status)
        if [ -f /var/lock/subsys/tomcat ]; then
          echo $"tomcat is running"
          exit 0
        fi
        echo $"tomcat has stopped"
        exit 3
        ;;
 stop)
 /usr/Tomcat/bin/shutdown.sh
 rm -f /var/lock/subsys/tomcat
 ;;
 restart)
 /usr/Tomcat/bin/shutdown.sh
/usr/Tomcat/bin/startup.sh
;;
*) 
echo "Usage: tomcat {start|stop|restart|status}" 
exit 1 
esac 
exit 0

posted @ 2008-07-25 22:17 冯东 阅读(261) | 评论 (0)编辑

2008年7月24日

前两天在linux里成功的安装了Oracle10G,每次启动oracle数据库都是用oracle用户登陆然后执行dbstart启动数据库。每次启动时都会报错
Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr
看来是listener服务没有起来,但是执行lsnrctl start却能启动listener服务。
搜索dbstart文件中的tnslsnr字符串

grep tnslsnr dbstart

返回结果:
  if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
    echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"

看来可能是ORACLE_HOME_LISTNER环境变量引起的,查找 ORACLE_HOME_LISTNER

grep ORACLE_HOME_LISTNER dbstart

返回结果
# 3) Set ORACLE_HOME_LISTNER
ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
if [ ! $ORACLE_HOME_LISTNER ] ; then
  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
  LOG=$ORACLE_HOME_LISTNER/listener.log
  if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
    $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &
    export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`
    echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"
        $LOGMSG "Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER: lsnrctl start"

其中有一段给ORACLE_HOME_LISTNER环境变量赋值,但是这个路径是不对的,编辑dbstart文件
vi dbstar
将该行改为export ORACLE_HOME_LISTNER=$ORACLE_HOME
保存退出,然后执行dbstart就没问题了。呵呵

想系统启动是自动启动数据库可以通过修改/etc/rc.d/rc.local文件
一开始我写的命令是
su oracle -c ora_App/product/10.2.0/db_1/bin/lsnrctl start
su oracle -c ora_App/product/10.2.0/db_1/bin/dbstart
但是su oracle -c ora_App/product/10.2.0/db_1/bin/lsnrctl start是参数start不起作用,它进入了lsnrctl命令提示符,并没有启动,后来把命令用双引号引起来就可以了如下:
su oracle -c "ora_App/product/10.2.0/db_1/bin/lsnrctl start"
是可以启动了,但是启动时报错如下:
Message 1053 not found; No message file for product=network, facility=TNSTNS-12541: Message 12541 not found; No message file for product=network, facility=TNS
TNS-12560: Message 12560 not found; No message file for product=network, facility=TNS
但是如果我用oracle用户登陆执行lsnrctl start就不报错,看来是在root用户中执行su oracle -c "ora_App/product/10.2.0/db_1/bin/lsnrctl start"有些Oracle环境变量没有设置。查了一下su 命令的参数,其中有个-l参数
 -.-l或--login  改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。  
加上参数
su oracle -lc "ora_App/product/10.2.0/db_1/bin/lsnrctl start"
正常了!呵呵,终于弄完了。总算是一晚上没白费。

posted @ 2008-07-24 00:06 冯东 阅读(478) | 评论 (1)编辑

2008年7月23日

    今天早上连接数据库死活连不上了,报错如下:
ORA-01034:Oracle not available
ORA-27101:shared memory realm does not exist
    难道有人重启服务器了oracle还没起来呢?连的服务器上一看,已经起了半个多小时了。按说应该是起来了,在服务器端用sqlplus "/ as sysdba" 命令也不能连上,看来实例也没起来。
    重启了一下问题还没有解决,查看数据库的日志文件,发现上一次启动日期是7月23日,对啊,下意识的看了一下服务器上的系统时间,竟然是7月1日,把系统日期改成正确的,重新启动数据库,OK问题解决了。
    我分析,是因为控制文件中记录了上次服务关闭的时间,理论上我再次的启动时间应该比上次关闭的时间晚,如果启动的时间比上次关闭的时间早,那控制文件就失效了,所以oracle就启动不起来了。

posted @ 2008-07-23 13:41 冯东 阅读(144) | 评论 (0)编辑

2008年7月22日

今天删除的表空间包含物化视图报错,ORA-23515: 实体化视图和/或它们的索引存在于表空间中
看来是需要删除物化视图,执行删除操作,因为数据太大了,半天也没弄完,取消了,上网查另外一种方法,删除用户,指定cascade 参数,这样就可以了

我试了一下感觉用
drop user user_name cascade;
删除的还是挺快的,比删除物化视图要快

总结 删除包含物化视图的表空间的方法
1。先删除物化视图的用户
drop user user_name cascade;
在删除表空间
drop tablespace tablespace_name INCLUDING CONTENTS and datafiles;

2.先删除物化视图,再删除表空间
DROP MATERIALIZED VIEW view_name;
再删除表空间
drop tablespace tablespace_name INCLUDING CONTENTS and datafiles;

如果数据量小的话那个都无所谓,如果数据量比较大的话建议用第一种方法。

posted @ 2008-07-22 16:17 冯东 阅读(96) | 评论 (0)编辑

2008年7月17日

  今天修改了个js脚本文件,但是怎么刷新也不管用,十有八九是缓存的问题,搜了一下,只找到了个linux下的,决定自己搜一下,首先缓存文件夹肯定在weblogic的安装目录,根据项目文件夹名进行搜索,找到了一个domains\base_domain\servers\AdminServer\tmp\_WL_user\下有项目文件夹而且站的空间还不小,断定就是他了删除,OK搞定了。
  后来想在Weblogic的控制台(console)里找找有关缓存的设置,若能在console里清了就方便了,可是找了半天没找到

posted @ 2008-07-17 09:19 冯东 阅读(147) | 评论 (0)编辑

2008年7月15日

今天用ant编译项目出现 [javac] 系统资源不足。的错误,如下

Buildfile: build.xml

-compile:
    [javac] Compiling 919 source files to E:\DSHR\dshr\WebContent\WEB-INF\classes
    [javac]
    [javac]
    [javac] 系统资源不足。
    [javac] 有关详细信息,请参阅以下堆栈追踪。
    [javac] java.lang.OutOfMemoryError: Java heap space

看来是内存不足,给设置大一点

    <target name="-compile">
        <javac srcdir="${srcdir}"  destdir="${builddir}" memorymaximumsize="500M" includes="**/*.java" classpathref="class_path">
            <compilerarg value="-Xlint:unchecked"/>             
        </javac>
    </target>
在编译出现下面的错误
Buildfile: build.xml

-compile:
    [javac] Compiling 919 source files to E:\DSHR\dshr\WebContent\WEB-INF\classes
    [javac] Since fork is false, ignoring memoryMaximumSize setting.
    [javac]
    [javac]
    [javac] 系统资源不足。
    [javac] 有关详细信息,请参阅以下堆栈追踪。
    [javac] java.lang.OutOfMemoryError: Java heap space

Since fork is false, ignoring memoryMaximumSize setting.这句话应该是因为fork是false所以我设置的memoryMaxmumSize就被忽略了,继续修改
    <target name="-compile">
        <javac srcdir="${srcdir}"  destdir="${builddir}" fork="true" memorymaximumsize="500M" includes="**/*.java" classpathref="class_path">
            <compilerarg value="-Xlint:unchecked"/>             
        </javac>
    </target>
再用ant编译,通过了。

说明:在Ant的文档中(默认为%ANT_HOME%/docs/manual/index.html)可以查看Ant Tasks 里面列出了不少任务其中javac在Compile Tasks中
点击javac可以查看更多的参数信息

posted @ 2008-07-15 12:21 冯东 阅读(125) | 评论 (0)编辑