Oracle 自动启动脚本

2011年07月21日 发表评论
Oracle自动启动脚本,包括启动实例:

##———————————————————————-
#!/usr/bin/sh

#whoami
#root
#chkconfig:345 51 49
#description:start thr oracle database deamons
#

SID_NAME=dbms
DBA_NAME=sys
DBA_PASSWD=admin123
ORACLE_HOME=/home/oracle/product/10.2.0/db_1
LISTENER_NAME=${SID_NAME}
MONITOR_INTERVAL=30

set -A MONITOR_PROCESSES ora_pmon_${SID_NAME} ora_dbw0_${SID_NAME} ora_ckpt_${SID_NAME}
 ora_smon_${SID_NAME} ora_lgwr_${SID_NAME} ora_reco_${SID_NAME}
HOST=`uname -n`
DATE=`date`
PATH=${ORACLE_HOME}/bin:/sbin:/usr/bin:/usr/sbin:/etc:/bin

export ORACLE_SID=${SID_NAME}
export ORACLE_HOME
export PATH

function oracle_run_cmds
{
su – oracle -c “${ORACLE_HOME}/bin/sqlplus ${DBA_NAME}/${DBA_PASSWD} as sysdba” <<EOF
startup
exit
EOF

su – oracle -c "${ORACLE_HOME}/bin/lsnrctl start"
}

function oracle_shutdown_cmds
{
su – oracle -c "${ORACLE_HOME}/bin/sqlplus ${DBA_NAME}/${DBA_PASSWD} as sysdba" < /dev/null
if [[ $? = 0 ]] then
MONITOR_PROCESSES_PID=`ps -fu oracle | grep tnslsnr | awk ‘{ print $2 }’`
print “Monitored process = tnslsnr, pid = ${MONITOR_PROCESSES_PID}” >> ${LOG_FILE}
return 0
fi

su – oracle -c “${ORACLE_HOME}/bin/lsnrctl start ${LISTENER_NAME}” > /dev/null
if [[ $? = 0 ]] then
MONITOR_PROCESSES_PID=`ps -fu oracle | grep tnslsnr | awk ‘{ print $2 }’`
print “Monitored process = tnslsnr, pid = ${MONITOR_PROCESSES_PID}” >> ${LOG_FILE}
print “\n *** listener has restarted. ***” >> ${LOG_FILE}
return 0
fi

print “\n *** listener has failed. Aborting Oracle. ***” >> ${LOG_FILE}
return 1
}

function monitor_processes
{
typeset -i n=0

for i in ${MONITOR_PROCESSES[@]}
do
MONITOR_PROCESSES_PID[$n]=`ps -fu oracle | awk ‘/’${i}$’/ { print $2 }’`
print “Monitored process = ${i}, pid = ${MONITOR_PROCESSES_PID[$n]}”

if [[ ${MONITOR_PROCESSES_PID[$n]} = “” ]] then
print “\n\n”
ps -ef
print “\n *** ${i} has failed at startup time. Aborting Oracle. ***”
set -m
nohup ${0} fault &
set +m
sleep 999999
fi
(( n = n + 1 ))
done

sleep ${MONITOR_INTERVAL}

while true
do
for i in ${MONITOR_PROCESSES_PID[@]}
do
kill -s 0 ${i} > /dev/null

if [[ $? != 0 ]] then
print “\n\n”
ps -ef
print “\n *** ${i} has failed. Aborting Oracle. ***”
set -m
nohup ${0} fault &
set +m
sleep 999999
fi
done

monitor_listener

if [[ $? = 1 ]] then
print “\n Listener has failed. Aborting Oracle. ***”
set -m
nohup ${0} fault &
set +m
sleep 999999
fi

sleep ${MONITOR_INTERVAL}
done
}

print “\n *** $0 called with $1 argument. ***\n”
case $1 in
monitor)
monitor_processes
;;

start)
print “\n \”${HOST}\”: Starting Oracle SESSION $SID_NAME at ${DATE}”
oracle_run_cmds
;;

stop)
print “\n \”${HOST}\”: Shutting down Oracle SESSION $SID_NAME at ${DATE}”
oracle_shutdown_cmds
;;

*)
print “Usage: ${0} [ shutdown | halt | start | monitor ]“
;;
esac

##——————————————————————
该脚本保存至 /etc/init.d/ 下 (我的环境为 Centos);
chmod u+x oracle_auto

chkconfig –add oracle_auto

查看3 4 5是否是启用状态或ON
chkconfig –list

备注:
一定要注意 ORACLE_SID 正确,出现以下情况:
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/opt/oracle10g/product/10.2/db_1/dbs/initdbms.ora’

解决方法:

将$ORACLE_BASE/admin /数据库名称/pfile目录下的init.ora.012009233838形式的文件copy到$ORACLE_HOME/dbs目录下 initoracle.ora即可。
(注:initoracle.ora中的oracle为你的实例名 ORACLE_SID)

修改SID:
source oraenv
分类: Oracle

别错过。。。

2011年06月2日 发表评论

没事做,转载一篇爱情小插曲:

女生很想他,于是决定给他发一条短信:
  你睡了吗?在干嘛呢?呵呵,我们还在说话呢。据说明天要降温,多穿点衣服呀!!其实— 其实— 我现在挺想你的!!

  考虑了一分钟,把短信改成:
  你睡了吗?在干嘛呢?呵呵,我们还在说话呢。据说明天要降温,多穿点衣服呀!!

  又考虑了一分钟:
  你睡了吗?在干嘛呢?呵呵,我们还在说话呢。

  又一分钟:
  你睡了吗?在干嘛呢?

  又一分钟:
  睡了吗?在干嘛?

  然后,她按了确定发送的键!( 叹气….)

  男生的手机响了!男生抓起来一看果然是她,莫名的激动起来!赶紧给她回短信:
  我还没有睡呢,现在正在上网。呵呵,我们宿舍也正热闹的起劲!!听说明天要降温,别忘了多穿衣服呀!其实– 其实– 咱们明天一起吃饭吧?

  考虑了一分钟:
  我还没有睡呢,现在正在上网。呵呵,我们宿舍也正热闹的起劲!!听说明天要降温,别忘了多穿衣服呀!

  又考虑了一分钟:
  我还没有睡呢,现在正在上网。

  又一分钟:
  上网。

  然后,他按了确定发送的键!( 叹气….)

分类: life

笔记-MySQL 正则表达式

2011年05月30日 发表评论

今天在导入 转换数据是,碰到了一个问题,url的http://* 变为http//*了。

可以用下面的语句进行修正:

update sdb_b2c_goods set url=replace(url,’http’,'http:’) where url regexp ‘http//*’;

分类: MySQL

4-28

2011年04月29日 发表评论

男人的胸怀是委屈撑大的,说的不错,我也想说,男人的成功也是委屈撑大的!

我,一个无名小辈,也行永远无法成功,但是,我会记得自己所受到的委屈、不解、嘲笑。。。

在我的内心,我明白,接下来  会对自己做一个比较大的改变,无论会是什么样的,自己都要做好心理准备。

无需做一个执着的人,最终,伤害的 仅仅是自己,同时也迷惑的自己的理智。

我觉得人要记住两句话:拼命珍惜自己拥有的一切,但没有什么是我不能放弃的。

分类: life

一早被忽悠了!–4月1号

2011年04月1日 发表评论

分类: life

转:MySQL权限表

2011年03月31日 发表评论
表名 user db host
列范围 Host Host Host
User Db Db
Password User
权限列 Select_priv Select_priv Select_priv
Insert_priv Insert_priv Insert_priv
Update_priv Update_priv Update_priv
Delete_priv Delete_priv Delete_priv
Index_priv Index_priv Index_priv
Alter_priv Alter_priv Alter_priv
Create_priv Create_priv Create_priv
Drop_priv Drop_priv Drop_priv
Grant_priv Grant_priv Grant_priv
Create_view_priv Create_view_priv Create_view_priv
Show_view_priv Show_view_priv Show_view_priv
Create_routine_priv Create_routine_priv
Alter_routine_priv Alter_routine_priv
References_priv References_priv References_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Show_db_priv
Super_priv
Create_tmp_table_priv Create_tmp_table_priv Create_tmp_table_priv
Lock_tables_priv Lock_tables_priv Lock_tables_priv
Execute_priv
Repl_slave_priv
Repl_client_priv
安全列 ssl_type
ssl_cipher
x509_issuer
x509_subject
资源控制列 max_questions
max_updates
max_connections
max_user_connections

对存取控制的第二阶段(请求证实),服务器执行请求验证以确保每个客户端有充分的权限满足各需求。除了user、db和host授权表,如果请求涉及表,服务器可以另外参考tables_priv和columns_priv表。tables_priv和columns_priv表可以对表和列提供更精确的权限控制。这些表的列如下:

表名 tables_priv columns_priv
范围列 Host Host
Db Db
User User
Table_name Table_name
Column_name
权限列 Table_priv Column_priv
Column_priv
其它列 Timestamp Timestamp
Grantor

Timestamp和Grantor列当前还未使用,这儿不再进一步讨论。

为了对涉及保存程序的请求进行验证,服务器将查阅procs_priv表。该表具有以下列:

表名 procs_priv
范围列 Host
Db
User
Routine_name
Routine_type
权限列 Proc_priv
其它列 Timestamp
Grantor

Routine_type列为ENUM列,值为’FUNCTION’或’PROCEDURE’,表示行所指的程序类型。该列允许为同名函数和程序单独授权。

对于GRANT和REVOKE语句,priv_type可以被指定为以下任何一种:

权限 意义
ALL [PRIVILEGES] 设置除GRANT OPTION之外的所有简单权限
ALTER 允许使用ALTER TABLE
ALTER ROUTINE 更改或取消已存储的子程序
CREATE 允许使用CREATE TABLE
CREATE ROUTINE 创建已存储的子程序
CREATE TEMPORARY TABLES 允许使用CREATE TEMPORARY TABLE
CREATE USER 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW 允许使用CREATE VIEW
DELETE 允许使用DELETE
DROP 允许使用DROP TABLE
EXECUTE 允许用户运行已存储的子程序
FILE 允许使用SELECT…INTO OUTFILE和LOAD DATA INFILE
INDEX 允许使用CREATE INDEX和DROP INDEX
INSERT 允许使用INSERT
LOCK TABLES 允许对您拥有SELECT权限的表使用LOCK TABLES
PROCESS 允许使用SHOW FULL PROCESSLIST
REFERENCES 未被实施
RELOAD 允许使用FLUSH
REPLICATION CLIENT 允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE 用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT 允许使用SELECT
SHOW DATABASES SHOW DATABASES显示所有数据库
SHOW VIEW 允许使用SHOW CREATE VIEW
SHUTDOWN 允许使用mysqladmin shutdown
SUPER 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。
UPDATE 允许使用UPDATE
USAGE “无权限”的同义词
GRANT OPTION 允许授予权限

 

分类: MySQL

检查 修复mysql database

2011年03月31日 发表评论
检查优化并修复所有的数据库用:

# mysqlcheck -A -o -r -p
Enter password:
database1 OK
database2 OK
———-
修复指定的数据库用
# mysqlcheck -A -o -r Database_NAME -p
即可
另外如果只是对某个表进行修复可以用:myisamchk或isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,
一般新的系统都使用 MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现
问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有
访问这个数据表,保险的情况下是最 好在进行检测时把MySQL服务器Shutdown掉。
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其 中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是 /var/lib/mysql/mysql.sock,
对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而 pathtochk则是myisamchk所在的位置,
DATA_DIR是你的MySQL数据库存放的位置。

1,简单的修复模式
myisamchk -r -q path/数据库/坏表.MYI
注:-r —-恢复模式 -q —-快速修复

2,使用安全修复模式

myisamchk –safe-recover path/数据库/坏表.MYI

3,困难的修复模式

如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段 。
在这种情况下,创建一个新的索引文件是必要的。按如下这样做:

把数据文件移更安全的地方。
使用表描述文件创建新的(空)数据和索引文件:
shell> mysql db_name
mysql> Delete FROM tbl_name;
mysql> quit

将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;
你要保留一个副本以防某些东西出错。)
回到阶段2。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。

4,非常困难的修复模式

只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,
描述文件就不再改变了。

从一个备份恢复描述文件并且回到阶段3。你也可以恢复索引文件并且回到阶段2。对后者,
你应该用myisamchk -r启动。
如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。
删除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的 数据库中。这给了你新的
描述和索引文件,但是让数据文件独自留下来了。
回到阶段2并且尝试重建索引文件。

5,优化表结构
myisamchk -r 表
也可以使用sql语句来优化OPTIMIZE TABLE
分类: MySQL
加关注

Get every new post delivered to your Inbox.