Oracle 自动启动脚本
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
别错过。。。
没事做,转载一篇爱情小插曲:
女生很想他,于是决定给他发一条短信:
你睡了吗?在干嘛呢?呵呵,我们还在说话呢。据说明天要降温,多穿点衣服呀!!其实— 其实— 我现在挺想你的!!
考虑了一分钟,把短信改成:
你睡了吗?在干嘛呢?呵呵,我们还在说话呢。据说明天要降温,多穿点衣服呀!!
又考虑了一分钟:
你睡了吗?在干嘛呢?呵呵,我们还在说话呢。
又一分钟:
你睡了吗?在干嘛呢?
又一分钟:
睡了吗?在干嘛?
然后,她按了确定发送的键!( 叹气….)
男生的手机响了!男生抓起来一看果然是她,莫名的激动起来!赶紧给她回短信:
我还没有睡呢,现在正在上网。呵呵,我们宿舍也正热闹的起劲!!听说明天要降温,别忘了多穿衣服呀!其实– 其实– 咱们明天一起吃饭吧?
考虑了一分钟:
我还没有睡呢,现在正在上网。呵呵,我们宿舍也正热闹的起劲!!听说明天要降温,别忘了多穿衣服呀!
又考虑了一分钟:
我还没有睡呢,现在正在上网。
又一分钟:
上网。
然后,他按了确定发送的键!( 叹气….)
笔记-MySQL 正则表达式
今天在导入 转换数据是,碰到了一个问题,url的http://* 变为http//*了。
可以用下面的语句进行修正:
update sdb_b2c_goods set url=replace(url,’http’,'http:’) where url regexp ‘http//*’;
4-28
男人的胸怀是委屈撑大的,说的不错,我也想说,男人的成功也是委屈撑大的!
我,一个无名小辈,也行永远无法成功,但是,我会记得自己所受到的委屈、不解、嘲笑。。。
在我的内心,我明白,接下来 会对自己做一个比较大的改变,无论会是什么样的,自己都要做好心理准备。
无需做一个执着的人,最终,伤害的 仅仅是自己,同时也迷惑的自己的理智。
我觉得人要记住两句话:拼命珍惜自己拥有的一切,但没有什么是我不能放弃的。
转:MySQL权限表
| 表名 | 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 database
检查优化并修复所有的数据库用: # 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
