首先说些题外话,准备认真学习数据库(首先是学习oracle), 今天刚浅浅的照着书上的方法实践了一遍数据库启动和关闭的基本操作。这其中也多多少少遇到了一些问题,现拿出来分享,第一,通过写日志加深自己的理解,第二,也算是给其他跟我一样的新手一些帮助。写得不好的地方请指出,THX!
首先谈谈数据库实例和数据库的区别。根据我的初步了解,数据库实例是指的进程和内存(SGA)的统称,没有持久的数据文件;数据库则是静态存在的,实际上磁盘上存储的物理文件。
接着简单的说一下数据库关闭的四种方式,第一 shutdown(正常关闭方式),这是最安全的关闭方式,他一直等待到最后一个用户自己断开与数据库的连接,但是这种方式存在一个弊病,如果一个用户一直连接在那里,却又没做什么操作,那么数据库将一直处于不能被关闭的状态。第二种 shutdown immediate方式,这种一直等待到当前的SQL语句执行完以后就关闭,即使用户没有断开与数据库的连接。第三种 shutdown transaction ,这种一直等待到当前事务处理完后关闭。第四种 shutdown abort ,这是最暴力的一种关闭方式,直接强制关闭,可能会造成数据的丢失,但是当再次启动还是会从分析日志文件进行回滚或是重做。最后这四种方式执行过程中,都不允许用户增加新的连接。
接着就是真正说到数据库实例数据库的启动和关闭了。首先是启动,一般步骤是 1.启动实例,2加载数据库,3打开数据库。
SQL>startup mount
这里貌似还要设置什么日志归档模式,还不熟悉。
SQL>alter database open;
然后是关闭数据库 就是刚才说的那四种方式
我这里用 shutdown immediate
但是我在实践的时候直接用sys身份去执行shutdown正常关闭时,貌似就一直卡在那里了,我猜想是由于我这个sys用户没有与数据库断开而导致关闭命令一直在等待的原因。但我们又要需要一个用户去执行这个关闭命令,这时该怎么办呢?我想可能是用触发器吧(欢迎读者给我答案)
我们现在打开数据库和关闭数据库的最基本的完成了,然后我谈谈对打开数据库为什么是那三个步骤的理解:因为我们的数据库文件是存在磁盘上的,我们要操作肯定是要先load到内存,所以我们就先启动一个实例,实际上就是进程+内存区域,然后我们将数据库mount到实例里面(注意这里不能用startup nomount),为了接下来使用数据库里面的文件,于是就打开数据库 alter database open。
最后谈谈自己中间遇到的几个问题
1>当我们没有启动实例,或是关闭了实例,用户连接的时候就是提示connected to an idle instance(连接到一个空例程,感觉这翻译不好)。
2>ORA-01507:如果我们没有加载数据库就alter database open
3>ORA-01031: insufficient privlieges 翻译过来就是权限不足
还有一些其他的常见错误,但那几个感觉都听容易解决的。在此就不罗列了
总结:oracle很复杂,自己现在还是了解皮毛,要克制浮躁,沉下心来学习!