2008年(239)
分类: Oracle
2008-06-17 22:14:05
1. 系统的启动和关闭
(1)系统的启动
启动网络服务:
$ lsnrctl start
启动实例:
$ sqlplus " / as sysdba"
SQL> startup
(2)系统的关闭
关闭实例:
$ sqlplus " / as sysdba"
SQL> shutdown immediate
如果实例无法正常关闭,可以使用以下方式:
SQL> shutdown abort
关闭网络服务:
$ lsnrctl stop
2. 系统运行日志文件的检查
ORACLE系统的运行日志文件为alert{instance_name}.log,可以通过配置参数BACKGROUND_DUMP_DEST,改变它的存放位置。这个运行日志文件,需要每天检查、定期备份并手工清除其内容。
在配置参数BACKGROUND_DUMP_DEST和USER_DUMP_DEST指定目录下,也存放着后台进程和用户的跟踪文件。这些文件也可以帮助管理员发现系统存在的故障,需要定期备份后清除其内容。此外,管理员也需要定期检查、清除网络日志文件。网络日志文件的位置,可以使用以下命令查看:
$ lsnrctl show logfile
3. 系统运行状况检查
管理员要随时关注数据库系统的运行。对ORACLE系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。
查看系统版本:
$ sqlplus -v
SQL> select * from v$version ;
查看实例、数据库状态:
$ ps -ef | grep {user_name}
$ ipcs -a | grep {user_name}
SQL> select status, logins, shutdown_pending, active_state from v$instance ;
SQL> select open_mode, guard_status from v$database ;
查看数据库属性:
SQL> select * from database_properties ;
查看网络状态:
$ lsnrctl status
$ lsnrctl services
查看系统内存使用:
SQL> show sga ;
查看系统配置:
SQL> show parameter {parameter_name} ;
查看控制文件的使用:
SQL> select * from v$controlfile ;
查看当前的用户连接:
select username,sid,serial# from v$session ;
查看数据库日志的定义和空间使用:
SQL> archive log list ;
SQL> select log_mode from v$database ;
SQL> select * from v$logfile ;
SQL> select group#, bytes, archived, status from v$log ;
显示表空间、数据文件定义
SQL> select * from v$tablespace ;
SQL> select name, status, bytes/(1024*1024) as "space(M)" from v$datafile ;
SQL> select name, status, bytes/(1024*1024) as "space(M)" from v$tempfile ;
查看表空间、数据文件的空间使用:
SQL> select tablespace_name, sum(bytes)/(1024*1024) as "free_space(M)" from dba_free_space group by tablespace_name;
SQL> select file_name, sum(a.bytes)/(1024*1024) as "free_space(M)" from dba_free_space a, dba_data_files b where a.file_id = b.file_id group by file_name ;
查看表、索引的空间使用:
SQL> select sum(bytes)/(1024*1024) as "size(M)" from dba_segments where segment_name = upper('&table_name') ;
SQL> select sum(bytes)/(1024*1024) as "size(M)" from dba_segments where segment_name = upper('&index_name') ;
查看系统中不正常的对象:
SQL> select owner, object_name, object_type from dba_objects where status = 'INVALID' ;
4. 系统性能状况分析
ORACLE系统提供了许多工具,可以用来收集和显示系统的各种运行数据,从而帮助管理员确定系统性能瓶颈。管理员可以使用的工具包括以下这些:
(1)数据字典及动态性能视图。数据字典视图中存放表、索引的数据特性和磁盘空间使用,如:dba_tables、dba_tab_columns、dba_indexes、index_stats等;动态性能视图记录从系统启动以来的所有运行统计,如:v$statname、v$sysstat、v$mystat、v$sesstat、v$sga、v$sgastat等。通过对这些视图的查看,可以发现系统所存在的性能问题。
(2)STATSPACK工具、UTLBSTAT和UTLESTAT工具。这两个工具可以用来收集一段时间内系统的运行状态数据,并将结果汇总后供管理员进行分析。
(3)进程等待事件。通过查看系统中所有用户会话对各种系统资源的等待,决定那些资源是系统的运行瓶颈。有关会话的资源等待信息,记录在字典视图中,如:v$event_name、v$system_name、v$session_event、v$session_wait。
5. 系统配置的改变
ORACLE的系统配置,有两种存放方式:二进制方式和文本方式。不同的存放方式需要不同的修改命令。
(1)二进制方式。存放在配置文件spfile{instance_name}.ora中,使用下列命令进行配置参数的改变:
alter system set {parameter_name} = {parameter_value} scope = spfile ;
(2)文本方式。存放在配置文件init{instance_name}.ora中,可以直接使用编辑命令进行修改。
ORACLE的网络配置,存放在文件:listerner.ora、sqlnet.ora、tnsnames.ora文件中,可以使用netca工具,也可以直接使用编辑命令进行修改。
6. 数据库日志维护
ORALCE系统支持日志的归档和非归档两种模式,确省情况下,数据库处于非归档日志模式。使用下列命令,改变数据库日志模式为归档模式:
SQL> alter database archivelog ;
在非归档模式下,管理员不需要维护数据库日志;在归档模式下,管理员需要归档数据库日志,可以采用两种归档方式:自动归档和手工归档。
1. 自动归档
设置配置参数LOG_ARCHIVE_DEST为true。系统启动后台进程,自动将被写满日志文件进行归档备份。
2. 手工归档
设置配置参数LOG_ARCHIVE_DEST为false。管理员使用下列命令,定期将已写满日志文件进行归档备份:
SQL> archive log all;
7. 备份和恢复处理
管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对ORACLE系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。
(1)实例运行环境备份
对实例的运行环境,需要备份:系统配置、网络配置、操作系统环境设置、密码文件、控制文件、磁盘空间的使用。
$ cp spfile{instance_name}.ora {output_file}
$ cp listener.ora {output_file}
$ cp .profile {output_file}
$ cp orapw{instance_name} {output_file}
SQL> alter database backup controlfile to trace ;
SQL> select * from v$controlfile ;
SQL> select * from v$log ;
SQL> select * from v$tablespace ;
SQL> select ts#,file#,name from v$datafile ;
SQL> select ts#,file#,name from v$tempfile ;
(2)用户创建数据库对象的SQL语句定义备份
在ORACLE系统中,要获取数据库对象的SQL语句定义,可以使用dbms_metadata函数包。下面所列是针对表的处理,用户可以采用类似的方法,获取其它数据库对象的SQL语句定义。
返回单个表的SQL语句定义:
SQL> select dbms_metadata.get_ddl('TABLE','{table_name}') from dual ;
返回系统中所有表的SQL语句定义:
SQL> select dbms_metadata.get_ddl('TABLE', table_name) from dba_tables ;
(3)数据库备份
管理员在备份数据库前,可以使用dbv工具,检查数据库结构的完整性。
① 检查数据库结构是否正确。
$ dbv file={file_name} blocksize={size_value}
② 根据需要,选用不同的备份方式。这里只列出数据库的手工备份方式。
(4)ORACLE数据库的脱机备份
对ORACLE数据库的脱机备份,可以按照以下操作步骤进行:
① 正常关闭数据库系统
SQL> shutdown immediate ;
② 使用操作系统命令,对数据库的所有数据文件、日志文件、控制文件,进行拷贝保存。
$ cp {file_name} {backup_file}
(5)ORACLE数据库的联机备份
对ORACLE数据库的联机备份,可以按照以下操作步骤进行:
① 使要备份表空间处于备份模式。
SQL> alter tablespace {tablespace_name} begin backup
② 使用操作系统命令,拷贝组成表空间的所有数据文件。
$ cp {file_name} {backup_file}
③ 结束表空间的备份模式。
SQL> alter tablespace {tablespace_name} end backup
④ 按照以上步骤,备份数据库的所有数据表空间。
⑤ 备份控制文件,归档当前日志文件。
SQL> alter system archive log current
SQL> alter database backup controlfile to ‘{backup_file_name}’
(6)数据库恢复
管理员在恢复数据库前,可以使用dbv工具,检查备份是否可用,然后根据数据库的归档日志模式,结合系统故障,决定要恢复方式。
(7)非归档日志模式数据库的恢复
对数据库的非归档日志模式,只能使用脱机备份进行恢复。
① 关闭数据库。
SQL> shutdown abort;
② 使用备份,恢复所有的数据库文件。
$ cp {backup_file} {file_name}
③ 重新启动数据库。
SQL> connect / as sysdba
SQL> startup
(8)归档日志模式数据库的恢复
对数据库的归档日志模式,可以使用脱机或者联机备份进行恢复。
① 关闭数据库。
SQL> shutdown abort
② 使用备份,恢复所有的数据库文件。
$ cp {backup_file} {file_name}
③ 启动实例,MOUNT数据库。
SQL> connect / as sysdba;
SQL> startup mount
④ 使用日志,恢复数据库到故障发生时刻。
SQL> recover database;
⑤ 打开数据库。
SQL> alter database open;
8. 数据库对象统计信息的维护
确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在ORACLE系统中,可以使用analyze命令,也可以使用dbms_stats函数包,进行数据库对象统计信息的收集。
使用analyze命令,生成表的统计信息:
SQL> analyze table {table_name} compute statistics ;
使用analyze命令,生成索引的统计信息:
SQL> analyze index {index_name} compute statistics ;
使用dbms_stats函数包,生成表的统计信息:
SQL> exec dbms_stats.gather_table_stats(ownname => '{schema_name}', tabname => '{table_name}', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto' )
使用dbms_stats函数包,生成索引的统计信息:
SQL> exec dbms_stats.gather_index_stats( ownname => '{schema_name}', indname => '{index_name}', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto' )
9. 数据的磁盘空间整理
在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。在ORACLE系统中可以使用dbms_space函数包,也可以查询数据字典表,检查表、索引的空间使用。
SQL> select num_rows, blocks, empty_blocks,avg_space, chain_cnt, avg_row_len from dba_tables where owner = '{schema_name}' and table_name = '{table_name}' ;
SQL> select name,lf_rows,del_lf_rows,br_rows,btree_space,used_space from index_stats where name = upper('{index_name}') ;
对需要重建的表和索引,ORACLE系统没有提供专门的工具,我们可以按照第9.3.11一节所讨论方法执行。
10. 数据得导入和导出
ORACLE系统提供EXPORT、EXPORT和SQL *LOADER工具,进行数据的导入和导出。
(1)EXPORT命令以二进制格式,可以将整个数据库、单个或者多个表等数据库对象的结构和数据导出到操作系统文件中。可以使用IMPORT命令,重建数据库、单个或者多个数据库对象等。
导出指定表的结构和数据:
$ exp {user_name}/{password} file = {output_file} tables = {table_name} grants=y indexs=y
导出指定用户所拥有数据库对象的结构和数据:
$ exp {user_name}/{password} file = {output_file} owner = {owner_name} grants=y rows=y compress=y
导出指定表空间中所有数据库对象的结构和数据:
$ exp {user_name}/{password} file = {output_file} tablespaces = {tablespace_name} rows=y
导出整个数据库的结构和数据:
$ exp {user_name}/{password} file = {output_file} full=y grants=y rows=y
创建指定表并导入数据:
$ imp {user_name}/{password} file = {imput_file} tables = {table_name} rows=y
创建整个数据库并导入数据:
$ imp {user_name}/{password} file = {imput_file} full=y
(2)使用SQL *LOADER工具装入数据,需要提供一个控制文件。通过该文件指定:输入数据文件的位置、数据的格式、配置细节、如何处理被装入的数据等。
$ sqlldr {user_name}/{password} control = {control_file} log = {log_file} direct=Y