转:Oracle DBA面试题
注: 以下的查寻语句和命令不是唯一的,只要能得到所要的结果既可。
你被某大公司聘为ORACLE DBA。当你第一天上班时,你的前任早以离开公司多日。他没有留下任何有用的文档。而你是该公司唯一的IT人员,此时你对公司的ORACLE数据库一无所知。你需要想办法得到如下的信息(请给出SQL命令或步骤):
以下每题10分,满分100。50分为及格。
1. 你需要知道该ORACLE数据库的名字和创建日期。
SQL> select dbid,name,created from v$database;
2. 你需要知道该ORACLE的实例名,主机名,版本号等。
SQL> select instance_number,instance_name,host_name,version from v$instance;
3. 你需要知道该ORACLE数据库是否运行在归档模式下?
SQL> archive log list;
4. 你需要知道该ORACLE数据库有几个控制文件和它们的配制。如果配制不合理请写出重新配制的步骤。
SQL> show parameter control_file;
SQL> select * from v$controlfile;
SQL> alter system set control_files='E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL','E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL02.CTL','E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL03.CTL' scope=spfile;
如果没有手动复制的话会报错:ORA-00205: error in identifying control file, check alert log for more info
多路复用时,这里要手动复制文件并修改名称,删除也是同理。
5. 你需要知道该ORACLE数据库有几个redo log groups和 redo log members。
SQL> select * from v$log;
SQL> select group#,status,member from v$logfile;
6. 你需要知道它们的配制是否合理。如果配制不合理请写出重新配制的步骤。
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> alter database drop logfile group 4;
SQL> alter database add logfile group 4 ('/u01/oracle/product/10.0.2/oradata/ORCL/redo41.log') size 100m;
SQL> alter database add logfile member '/u01/oracle/product/10.0.2/oradata/ORCL/redo42.log' to group 4;
7. 你需要知道该ORACLE数据库有几个表空间,以及这些表空间基于哪些文件。
SQL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 SYSAUX YES NO YES
2 UNDOTBS1 YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
6 EXAMPLE YES NO YES
7 TRANS YES NO YES
8 TEST1 YES NO YES
SQL> select tablespace_name,contents,status from dba_tablespaces;
TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------- ---------
SYSTEM PERMANENT ONLINE
SYSAUX PERMANENT ONLINE
UNDOTBS1 UNDO ONLINE
TEMP TEMPORARY ONLINE
USERS PERMANENT ONLINE
EXAMPLE PERMANENT ONLINE
TRANS PERMANENT READ ONLY
TEST1 PERMANENT ONLINE
SQL> select file_name,file_id,tablespace_name,bytes,status from dba_data_files;
8. 你需要知道该ORACLE数据库每个表空间的状态。
SQL> desc dba_tablespaces;
9. 经过以上的工作,你发现SYSTEM表空间所在的硬盘(DISK1)已经快要满了,你想把它移到另一个I/O操作很少的硬盘上(DISK8)。请你写出操作的步骤。
shutdown immediate;
移动文件
startup mount
alter database rename file 1 to 'x';
alter database open;
10. 你还发现INDEX表空间与DATA表空间在同一个硬盘上(DISK5),你想把INDEX表空间移到另一个I/O操作很少的硬盘(DISK10)上。请你写出操作的步骤。
alter tablespace index offline
移动文件
alter database rename file 'xxxx' to 'yyy';
alter tablespace index online;