1. 创建数据库时指定字符集,连接数设置

select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
show parameter sessions

2. 数据库文件、表空间、数据文件、段、区、块、表的概念和互相的关系
数据库文件是什么: 包括控制文件,数据文件,日志文件
表空间(tablespace):数据库上可以使用的最大逻辑概念,在物理上看是有数据文件所组成的,从逻辑上来看的话,是有段(segment)所组成的
段(segment):段可能是一张表,一个索引,回滚段,逻辑上来看的话是有区组成的(extents)
区(extents):一组连续的块(block)组成的。是段分配空间的最小单位
块(block):定义了最小的I/O单元(可能是8k,16k,32K),数据库读取最小的i/o单位。

3. 数据库5大后台进程作用和触发条件
系统监视器 (SMON):出现故障后启动实例时执行崩溃恢复任务
(1) Instance恢复(重做日志前滚 / 打开数据库 / 回滚未递交事务)
(2) 合并空闲空间
(3) 回收临时段
进程监视器 (PMON):用户进程失败时执行进程清理任务
(1) Rollback
(2) 释放锁和其它资源
(3) 重启死dispatcher
数据库写进程 (DBWn):将修改后的块从数据库缓冲区高速缓存写入磁盘中的数据文件
(1) 发生Checkpoint
(2) 脏数据达到限制
(3) 没有空闲高速缓存区
(4) 超时
(5) RAC ping request is made
(6) 表空间Offline,Readonly,BEGIN BACKUP
(7) 表DROP或TRUNCATE
检查点 (CKPT):通过更新数据库的所有数据文件和控制文件指出最新的检查点
(1) DBWn要求发生
(2) 更新数据文件头
(3) 更新控制文件
日志写进程 (LGWR):将重做日志条目写入磁盘
(1) 用户进程提交事务处理时;
(2) 每隔三秒钟,或重做日志缓冲区三分之一的空间已填满,或包含至少 1 MB 数据时;
(3) DBWn 进程将修改的缓冲区写入磁盘时(如果相应的重做日志数据尚未写入磁盘)。
归档进程 (ARCn):发生日志切换时将重做日志文件复制到归档存储器

4. 数据库启动和关闭的各个阶段做的事情,不同的启动和关闭方式的区别
Nomount(读SPFILE初始化实例)
Mount(读control file关联相关数据文件)
Open(完全打开,可以供所有用户读取和使用)
Shutdown immediate:
允许新连接 (N),等待当前会话结束 (N),等待当前事务处理结束 (N),强制选择检查点并关闭文件 (Y)
Shutdown abort:
允许新连接 (N),等待当前会话结束 (N),等待当前事务处理结束 (N),强制选择检查点并关闭文件 (N)
Shutdown normal:
允许新连接 (N),等待当前会话结束 (Y),等待当前事务处理结束 (Y),强制选择检查点并关闭文件 (Y)
Shutdown TRANSACTIONAL:
允许新连接 (N),等待当前会话结束 (N),等待当前事务处理结束 (Y),强制选择检查点并关闭文件 (Y)

5. 数据库打开前的前滚和回滚的概念
前滚:应用redo日志
回滚:没有提交的事务,进行回滚的操作

6. 创建、删除、启动和关闭监听,创建并测试tnsnames
使用Netca 创建和删除监听
使用lsnrctl start&stop启动和关闭监听
使用netca 创建本地连接
Tnsping 进行测试

7. alert文件记录的内容和作用
记录了日常的启动和关闭数据库
日常DBA的操作命令
日常的alert报错
作用:最主要的作用是排查故障是可以查看更详细的报错信息
了解系统日常的运行情况比如日志切换频率,dataguard日志应用情况等,

8. 如何查看数据库的实例、表空间、数据文件、会话、SGA的信息

Select * from v$instance;
Select * from v$tablespace &dba_tablespaces
Select * from v$datafile
Select * from v$session
Show sga

9. SGA、PGA的构成,各部分的作用
系统全局区 (SGA):由所有服务器进程和后台进程共享
程序全局区 (PGA):专用于每一个服务器进程或后台进程。每一个进程使用一个 PGA
SGA 包含以下数据结构:
数据库缓冲区高速缓存:缓存从数据库检索的数据块
重做日志缓冲区:高速缓存重做信息(用于实例恢复),直到可以将其写入磁盘中存储的物理重做日志文件
共享池:缓存可在用户间共享的各个结构
大型池:是一个可选区域,可为某些大型进程(如 Oracle 备份和恢复操作、I/O 服务器进程)提供大量内存分配
Java 池:用于 Java 虚拟机 (JVM) 中所有特定会话的 Java 代码和数据
Streams 池:由 Oracle Streams 使用
PGA:
专用SQL 区
游标和 SQL 区
会话内存
工作区

10. 简单的不完全恢复
基于用户的: UNTIL TIME ‘YYYY-MM-DD:HH24:MI:SS’
UNTIL CANCEL
UNTIL CHANGE
USING BACKUP CONTROLFILE

基于RMAN的:UNTIL TIME、
UNTIL SEQUENCE
UNTIL SCN

RMAN> sql 'alter session set NLS_DATE_FORMAT="MM-DD-YYYY HH24:MI:SS"';
RMAN> run {
2> restore database;
3> SET until time='11-02-2011 13:53:09';
4> recover database;
5> alter database open resetlogs;}

11. 简单的全库冷、热RMAN备份及还原
全库rman热备 : backup database
全库rman还原 sqlplus: startup mount;
Rman: restore database;
Rman: recover database;
Sqlplus: alter database open;

12. 会使用exp、expdp进行用户、表的迁移

$ exp system/manager file=/home/oracle/hr.dmp log=/home/oracle/hr.log owner=hr direct=y
$ imp system/manager file=/home/oracle/hr.dmp log=/home/oracle/hr.log fromuser=hr touser=hr
$ exp system/manager file=/home/oracle/emp_dept.dmp log=/home/oracle/emp_dept.log tables=(hr.employees,hr.departments) direct=y
$ imp system/manager file=/home/oracle/emp_dept.dmp log=/home/oracle/emp_dept.log

SQL> create directory expdp_dir as '/home/oracle';
$ expdp userid=system/manager dumpfile=hr.dmp logfile=hr.log directory=expdp_dir schemas=hr job_name=expdp_hr
$ impdp userid=system/manager dumpfile=hr.dmp directory=expdp_dir schemas=hr
$ expdp userid=hr/hr dumpfile=hr_tab.dmp logfile=hr_tab.log directory=expdp_dir tables=employees,departments job_name=expdp_hr_table
$ impdp userid=system/manager dumpfile=hr_tab.dmp directory=expdp_dir tables=employees,departments

13. 简单的Linux下性能相关的命令
top, vmstat, sar, iostat, free

14. 会生成awr和ash报告,并简单的分析

@/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/awrrpt.sql
@/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/ashrpt.sql

15. 会使用hint

SQL> explain plan for select * from hr.employees where employee_id=100;
SQL> select * from table(dbms_xplan.display);
--------------------------------------------------------------------------------------------
Plan hash value: 1833546154
--------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |     1 |    68 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES     |     1 |    68 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | EMP_EMP_ID_PK |     1 |       |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

SQL> explain plan for select /*+full(a)*/ * from hr.employees a where a.employee_id=100;
SQL> select * from table(dbms_xplan.display);
--------------------------------------------------------------------------------------------
Plan hash value: 1445457117
-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |     1 |    68 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMPLOYEES |     1 |    68 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------

SQL> explain plan for select /*+index(a,EMP_EMP_ID_PK)*/ * from hr.employees a where a.employee_id is null;
SQL> select * from table(dbms_xplan.display);
------------------------------------
Plan hash value: 3651440784
--------------------------------------------------------------------------------------------
| Id  | Operation                    | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |               |     1 |    68 |     0   (0)|          |
|*  1 |  FILTER                     |               |      |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMPLOYEES     |   107 |  7276 |     3   (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN           | EMP_EMP_ID_PK |   107 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

16. 会使用autotrace,explain plan

SQL> set autotrace on
SQL> select * from hr.employees;
SQL> set autotrace off
SQL> explain plan for select * from hr.employees;
SQL> select * from table(dbms_xplan.display);

17. 懂得ASM基本概念,与RAID区别开
ASM指的是一个在物理卷(或者磁盘分区)上特别为Oracle数据文件而创建的“专用”文件系统。该文件系统由Oracle内核保存并维护,Oracle知道数据所处的位置,并自动管理这些位置,进而获得适用于数据库的最高性能和最大可用性。管理员不需要知道和关心Oracle将这些区间(extent)放在磁盘上的什么位置,ASM已经做好了所有的管理工作。通过ASM,UNIX的卷管理(LVM管理层)、文件系统(File System)管理都不再需要。
可以提高或降低重新平衡操作的速度,以减小对 I/O 子系统的影响。ASM 还提供了镜像保护,因此您不必再购买第三方的“逻辑卷管理器”。ASM 的一个特别的优势在于其镜像的应用基于文件而不是基于卷。因此,同一磁盘组中可以包含受镜像保护的文件和不受镜像保护的文件的组合。
ASM 支持数据文件、日志文件、控制文件、归档日志、RMAN 备份集以及其它 Oracle 数据库文件类型。ASM 支持 Oracle Real Application Clusters,而且无需使用“集群逻辑卷管理器”或“集群文件系统”。
ASM与RAID没有必然的联系。ASM可以一定程度上实现软RAID,但是,硬件层面往往还是需要做RAID的。

18. 会打开数据库审计

SQL> alter system set audit_trail =’DB’ scope=spfile;
SQL> shutdown immediate
SQL> startup
SQL> audit session;
SQL> select * from dba_stmt_audit_opts;

19. 会写简单的PL/SQL包,存储过程,函数
PL/SQL包:

create or replace package pkg_test is
  procedure pro_test;
  function fun_test(pi number) return varchar2;
end;
/
create or replace package body pkg_test is
  procedure pro_test is
    ro varchar2(20);
  begin
    dbms_output.enable(999);
    select to_char(sysdate + 10, 'yyyy-mm-dd') into ro from dual;
    dbms_output.put_line(ro);
  exception
    when others then
      null;
  end pro_test;
  function fun_test(pi number) return varchar2 is
    ro varchar2(20);
  begin
    select to_char(sysdate + pi, 'yyyy-mm-dd') into ro from dual;
    return ro;
  exception
    when others then
      null;
  end fun_test;
begin
  null;
end;
/
存储过程:
create or replace procedure pro_test is
  ro varchar2(20);
begin
  dbms_output.enable(999);
  select to_char(sysdate + 10, 'yyyy-mm-dd') into ro from dual;
  dbms_output.put_line(ro);
exception
  when others then
    null;
end pro_test;
/
函数:
create or replace function fun_test(pi number) return varchar2 is
  ro varchar2(20);
begin
  select to_char(sysdate + pi, 'yyyy-mm-dd') into ro from dual;
  return ro;
exception
  when others then
    null;
end fun_test;
/

20. 会简单的闪回查询,全库闪回
闪回查询:

SQL> create table fb_test as select employee_id,first_name,last_name from employees;

Table created.

SQL> select count(*) from fb_test;

  COUNT(*)
----------
       107

SQL> delete from fb_test where employee_id<105;

5 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*) from fb_test;

  COUNT(*)
----------
       102

SQL> select count(*) from fb_test as of timestamp sysdate-1/1440;

  COUNT(*)
----------
       107

全库闪回:
必备条件:
A. 数据库必须打开了flash recovery area;

SQL> alter system set db_recovery_file_dest_size=2G;
SQL> alter system set db_recovery_file_dest='/u01/app/oracle/flashback';
SQL> show parameter db_recovery_file

B. 数据库必须处于archivelog模式

SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archive';
SQL> archive log list
SQL> alter database archivelog;

C. 数据库启用了flashback database;

SQL> alter database force logging;
SQL> alter database flashback on;
SQL> select flashback_on,force_logging from v$database;

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     506002

SQL> create table hr.fb_test as select employee_id,first_name,last_name from hr.employees;

Table created.

SQL> select count(*) from hr.fb_test;

  COUNT(*)
----------
       107

SQL> delete from hr.fb_test where employee_id<105;

5 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*) from hr.fb_test;

  COUNT(*)
----------
       102

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             104859216 bytes
Database Buffers          176160768 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> flashback database to scn 506002;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from hr.fb_test;
select count(*) from hr.fb_test
                        *
ERROR at line 1:
ORA-00942: table or view does not exist

21. 会查询和修改数据库的参数、懂得维护spfile

SQL> select * from v$parameter;
SQL> show parameter;
SQL> alter system set log_archive_dest_1='LOCATION=/archive';
SQL> alter system set utl_file_dir=’/home/oracle’ scope=spfile;
SQL> create pfile from spfile;
SQL> create spfile from pfile;

22. 会设置数据库的归档模式

SQL> startup nomount;
SQL> alter system set log_archive_dest_1='LOCATION=/archive';
SQL>alter database mount;
SQL> alter database archivelog; / alter database noarchivelog;
SQL> alter database open;
Trackback

no comment untill now

Add your comment now

切换到手机版