漫谈数据库的启动和关闭
2024-07-21 02:05:31
供稿:网友
对于dba们来说,关闭和重新启动数据库以便优化、调整应用的运行是经常碰到的事情。如果用户已经log进如了数据库,你用shutdown immediate 或shutdown abort命令来执行关闭数据库,那用户将不能连接,直到数据库重新启动,用户时常会抱怨:怎么又要重起。其实,每次这样的启动关闭都是为了数据库能更好的运做。这篇文章将具体介绍shutdown/startup操作时应想到的步骤和许多注意事项,或许这些能对你有所帮助。 note:在执行第一步前,shut down 数据库,不要提前关闭sql*net,直到你确认关闭了server上的数据库后再关闭sql*net。因为一旦你关闭了sql*net,用户将将失去和数据库的会话。 第一步---存档或删除老的trace files 和 logs 当你启动oracle的一个实例(instance)时,oracle把关于该实例的诊断信息写入指定的trace 和 log文件。每个后台进程都增加一个trace文件,它被存储在指定的目录(该路径由init.ora 或config.ora文件中的background_dump_dest参数指定)。用户在数据库中遇到一个内部错误时也增加 users' trace文件,该文件的位置由init.ora 或 config.ora 文件中的user_dump_dest参数指定。 trace文件的个数和名称形式由你的操作系统决定。例如在unix下,文件名是一个数字加下画线加后台进程号,类似3_12345.trc,当你下一次启动实例时,一个新的文件将被产生,因为进程号的不同,文件名可能是3_13245.trc 。 由于每次启动和关闭数据库时,oracle并不自动删除trace文件,所以如果忽略这个步骤,那这些没有用的文件将占据大量的自由空间。所以dba应该主动的管理这些文件,或删除或存档在别的指定目录下,如何管理主要是根据你自己的开发环境需要而订了。 sql*net也产生log文件,一般叫listener.log,为了能知道他的位置,可以键入命令 lsnrctl status listener.log文件大小也随着启动的次数不断的变大,所以通过妥善管理它也能有效的利用空间。 第二步---改名alert log文件 alert log文件也是用来记录instance的诊断信息的。它的存放目录也通过background_dump_dest参数来指定。一般情况下alert log文件命名方式为:alert_.log。alter log文件包括了一些数据库主要事件信息,例如:startup,dhutdown, redo log 的使用,tablespace的改变,文件的改变,内部错误信息,tablespace-backup的状态的改变等。alter log文件是重要的,同时该文件的大小增长的速度也很惊人,如果你不检查他,一段时间后你想看看它将是很费劲,因为它已经很大了,查起来也费劲。 为了既能留下这些有用的信息,同时不至于浪费很大的空间,可以用改名的方法。你可以在任何时候更改alter log文件名,甚至在database open时。当oracle不能找到被background_dump_desc指定的文件时,他将增加一个新的alter log文件。虽然改名不要求shutdow,但选择在shutdown/startup数据库时更改名字是一个好的主意。 note:下面的几步是在restart数据库时做的。 第三步---产生一个增加控制文件(create congrolfile )命令的文件 为了recover一个被破坏的数据库,你不得不用create controlfile 命令来重建control files。create controlfile命令有两个使用: 1、在你的现有control files文件破化后重建它 2、在alter database 级别的参数时,如:maxdatafiles 你可以手输入命令,但最好在startup前发送一命令,以便你拥有最新版本的create controlfile命令。从进入sqldba,server manager或者sql*plus,输入: alter database backup controlfile to trace; 该命令在user_dump_desc参数指定的路径产生一个trace文件,名字可能是sidname_processid.trc,该文件将包含针对你的数据库的完整的create controlfile 语法。 第四步--把packages 和 procedures驻留sga区 众所周知,当pl/sql objects被一个用户调用时,它将被存储在sga区的sql共享池中,当别人再度调用该object时直接从sga区读取,能感受到明显的速度提升。所以,把常用的packages 和 procedures在startup时就载入并驻留sga,将提高应用的整体性能。通过从新编译、调用等方法可以调用object(procedures 或 cursors)进sga,然后用dbms_shared_pool.keep来驻留sga。如下: alter package appowner.add_client compile; execute dbms_shared_pool.keep('appowner.add_client','p'); (p代表procedures,c代表cursors) 一般每个数据库包括两类驻留程序: 1、数据库的核心packages 2、用户自定义的packages 核心packages包括sys 所有的packages,standard,dbms_sql, dbms_utility, diutil,为了查看你的instance中那些被驻留了,查询dba_object_size,用下面的语句: select owner, name, type, source_size+code_size+parsed_size+error_size total_bytes from dba_object_size where type = 'package body' order by 4 desc;