说明
在上海热线项目上,需要每周一从数据库查询活跃用户数量并提交报告。只要是重复的工作,就一定要自动化。
- 首先采用shell脚本从数据库中查询数据,结果存放在一个文本文件中。
- 利用python脚本,将查询结果通过网络中的邮件服务器(内网访问不需要认证)发送给客服人员进行整理和汇总。
以前我们技术支持都是采用安装mailx应用程序来实现邮件发送的,这里因为我近期在学习python,所以就做了一些小小的变动,改为python脚本来实现邮件发送。
在上海热线项目上,需要每周一从数据库查询活跃用户数量并提交报告。只要是重复的工作,就一定要自动化。
以前我们技术支持都是采用安装mailx应用程序来实现邮件发送的,这里因为我近期在学习python,所以就做了一些小小的变动,改为python脚本来实现邮件发送。
今天在一个项目排除用户使用错误时,需要登录Oracle数据库进行查询和修改。但是,意外发现普通用户无法访问oracle instance。
sqlplus umail/umail
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 12 10:30:54 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-01033: ORACLE initialization or shutdown in progress Enter user-name:
不过,以 connect as sysdba 方式可以使用
sqlplus "/ as sysdba"
参考 ORA-01033: ORACLE initialization or shutdown in progress
对系统状态进行检查:
sqlplus / as sysdba
select status, database_status from v$instance;
STATUS DATABASE_STATUS ------------ ----------------- STARTED ACTIVE
select open_mode from v$database;
select open_mode from v$database
*
ERROR at line 1:
ORA-01507: database not mounted
以上看到instance已经启动,但是数据库没有mounted。
尝试mount数据库
alter database mount;
alter database mount * ERROR at line 1: ORA-01102: cannot mount database in EXCLUSIVE mode
这个问题比较奇特,似乎是数据库状态不正常,处于维护状态(no mounted),所以普通用户无法使用。
不过,此 时,整个邮件系统使用尚正常,连接数据库的邮件系统能够正常收发邮件。(应用正常)
这个问题可能和我上次数据库故障 (无法使用sqlplus登录进行shutodown,不得已kill了oracle进程)有关。那次kill掉oracle进程后,也不能正常使用 sqlplus,被迫硬关机服务器。在那次故障处理时,数据库已经启动了,但是我再次使用slqplus "/ as sysdba", 并再次startup的报错情况有关。此时oracle对于后启动的命令没有正常显示mount,也不能分配资源。(Oracle数据库启动后,如果再尝试 startup ,会报错误 ORA-01102: cannot mount database in EXCLUSIVE mode)