前言
关于数据库启动和停止我们如果有所经验,总认为只有一句命令罢了。可是命令后面的的操作过程,如果量化形容,我看见过一本书用了100多页专门讲这个。我们只是讲一点点而已。
启动
我们眼里的数据库启动情况。
详细的过程。从网上盗的图。
1、shutdown->nomount
这个过程中,sql plus做了一件事,启动实例,使实例的状态变成started。我们所要关注的一件事在startup nomount的过程中,数据库加载了一个文件。我们先查一下spfile。
为了验证,数据库会加载这个文件,我们把这个文件挪走。
为什么我们挪走的是spfileteid.ora而提示的确是initteid.ora,为什么?我们现在先创建这个文件。
我们再把spfile挪走。启动
启动到nomount成功。也就是说spfile和pfile只要存在一个,实例都是可以启动的。两者有什么区别?spfile内容截图:
明显非纯文本文件,有乱码。pfile文件内容:
teid.__db_cache_size=171966464
teid.__java_pool_size=4194304
teid.__large_pool_size=4194304
teid.__oracle_base='F:\Oracle'#ORACLE_BASE set from environment
teid.__pga_aggregate_target=41943040
teid.__sga_target=314572800
teid.__shared_io_pool_size=0
teid.__shared_pool_size=125829120
teid.__streams_pool_size=0
*.audit_file_dest='F:\Oracle\admin\TEST\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='F:\Oradata\TEST\control01.ctl','F:\Oracle\flash_recovery_area\TEST\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TEST'
*.db_recovery_file_dest='F:\Oracle\flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='F:\Oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TEIDXDB)'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=41943040
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=314572800
*.undo_tablespace='UNDOTBS1'
teid.__java_pool_size=4194304
teid.__large_pool_size=4194304
teid.__oracle_base='F:\Oracle'#ORACLE_BASE set from environment
teid.__pga_aggregate_target=41943040
teid.__sga_target=314572800
teid.__shared_io_pool_size=0
teid.__shared_pool_size=125829120
teid.__streams_pool_size=0
*.audit_file_dest='F:\Oracle\admin\TEST\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='F:\Oradata\TEST\control01.ctl','F:\Oracle\flash_recovery_area\TEST\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TEST'
*.db_recovery_file_dest='F:\Oracle\flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='F:\Oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TEIDXDB)'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=41943040
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=314572800
*.undo_tablespace='UNDOTBS1'
pfile是我们根据spfile创建的,意味着其实两者有着相同的作用,简单点说:动态参数修改以后会直接写入spfile之中,而不要像pfile一样,手动修改文本文档。spfile的修改:参数的种类分为:Database参数、system参数、session参数。其实我们更要搞懂的是静态参数和动态参数,它决定了我们该怎么修改。
为什么会出现上面的场景。我们先得从静态属性和动态属性开始。静态属性不能直接修改,需要修改以后,重启服务器。动态属性可以直接修改,修改以后不需要重启服务器。我们在说说scope的几个值:spfile、memory、both。不难理解,一个修改到spfile里面,一个在内存中生效,最后那个就是两者都同时修改(不加参数的情况下如此)。静态参数先修改到spfile中,再重启生效,动态可以直接两边生效。create pfile from spfile;
create pfile from memory;
create spfile from pfile;
create spfile from memory;我们稍微总结一下,这个过程可以说是系统通过pfile或者spfile把数据库的实例启动了。2、nomount->mount从shutdown到nomount,我们使用了spfile或者pfile。在pfile里面有这么句。我们可以通过这一句定位到控制文件。
*.control_files='F:\Oradata\TEST\control01.ctl','F:\Oracle\flash_recovery_area\TEST\control02.ctl'
这样我们就把Database改到mount状态。我们再说说,这一过程,发生了什么?简单点说:加载控制文件。我们再说说控制文件什么作用。a.数据库名称以及数据库创建时间b.所有数据文件和重做日志文件的名称和位置。c.表空间信息。d.offline数据文件信息。e.重做日志及归档日志信息等等,不说了。我们只要知道很多信息就好,这些分别信息代表什么,看得懂的就说一下,看不懂的就算了。这个状态的转变主要就是加载控制文件。3、mount->open根据控制文件的信息,加载数据库文件,加载日志文件,从而打开数据库。
关闭
关闭记住几条命令就行了。
shutdown
normal:不允许新连接;等待当前session结束;等待当前的事务结束;强制检查点并关闭文件。
shutdown transational
transactional:不允许新连接;不等待当前session结束;等待当前的事务结束;强制检查点并关闭文件。
shutdown immediate
immediate:不允许新连接;不等待当前session结束;不等待当前的事务结束;强制检查点并关闭文件。
shutdown abort
abort:不允许新连接;不等待当前session结束;不等待当前的事务结束;不强制检查点并关闭文件。
结束语
启动需要了解的是几个状态,了解几个文件,特别是spfile和pfile的关系。以及参数的设置,控制文件的作用。关闭要记住后两条命令。最后献上一篇很详细的文章。Oracle 数据库实例启动关闭过程:http://blog.csdn.net/robinson_0612/article/details/5542983