1数据库基础

1.1数据库启动方式

方式

含义

startup      

启动实例、装载数据库、打开数据库

startup nomount        

启动实例,不加载数据库

startup mount  

启动实例,加载数据库但不打开数据库

startup restrict  

启动过程中限制访问数据库

startup force    

迫使数据库启动

startup pfile=/oracle/app/oracle/product/10g/dbs/initminos.ora        

使用非缺省参数文件启动数据库,以特定文件中指定参数启动数据库,本例为”/oracle/app/oracle/product/10g/dbs/initminos.ora



注:启动前需要先使用sqlplus登录到数据库中


$ sqlplus sys/oracle as sysdba


SQL*Plus: Release10.2.0.4.0 - Production on Mon May 28 03:39:35 2012


Copyright (c) 1982, 2007,Oracle.  All Rights Reserved.


Connected to an idleinstance.


SQL> startup

ORACLE instance started.


Total System Global Area8589934592 bytes

Fixed Size                  2097760 bytes

Variable Size            3271560608 bytes

Database Buffers         5301600256 bytes

Redo Buffers               14675968 bytes

Database mounted.

Database opened.

SQL>


1.2数据库关闭方式

方式

含义

shutdown normal

不允许新的连接;等待当前的连接释放

shutdown immediately

不允许新的连接;当前的事务回滚;不等待当前的连接释放

shutdown abort

不允许新的连接;立即中止当前事务中的SQL当前事务不回滚;下次启动时有实例的恢复过程

shutdown transactional

不允许新的连接;等待当前事务完成;事务完成后断开当前的连接


$ sqlplus sys/oracle assysdba


SQL*Plus: Release10.2.0.4.0 - Production on Mon May 28 03:39:35 2012


Copyright (c) 1982, 2007,Oracle.  All Rights Reserved.


Connected

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

1.3数据库常用的系统表


1.4连接数据库的常用命令格式

a)sqlplus "/ as sysdba"这是典型的操作系统认证,不需要listener进程,数据库即使不可用也可以登录

b)sqlplus username/password 不需要listener进程,登录本机数据库,数据库实例启动即可

c)sqlplususername/password@tnsname需要listener进程,最常见的远程登录模式,需要启动数据库实例和listener进程

在多实例环境中,a)b ) 两种连接方式默认连接的实例为当前环境变量中SID值定义的实例,如果需要连接另外的实例,请更改环境变量中SID值后进行连接

$ env | grep SID  

ORACLE_SID=minos

$ export ORACLE_SID=rct

$ env | grep SID

ORACLE_SID=rct

1.5数据库主要配置文件

2环境变量文件

aix系统中,环境变量文件一般存放在/etc/profile ,/etc/environment, $HOME/.profile 这三个文件中

三个环境变量的定义如下:

/etc/environment -操作系统在登录时使用的第一个文件, / etc / environment文件中包含的变量指定的所有进程的基本环境。

/etc/profile– 操作系统在登录时使用的第二文件,这个文件中包含了所有登录用户指定的基本环境

$HOME/.profile -操作系统在登录时最后使用的文件,这个文件中存在放在属主目录中,定义了当前登录用户的工作环境

系统级的环境变量一般在/etc/environment 文件中定义,与数据库相关的环境变量就定义在/etc/profile 文件中,

如下所示

export ORACLE_BASE=/oracle/app/oracle

export ORACLE_HOME=/oracle/app/oracle/product/10g/

export ORACLE_SID=minos

对于solaris系统而言,环境变量文件一般存放在/etc/profile , $HOME/.profile这两个文件中。

故修改时只需修改/etc/profile 文件即可

2/etc/oratab 文件

/etc/oratab 文件描述目前系统中创建的数据库实例以及是否通过 dbstart dbshut 来控制该实例的启动与关闭,如下所示:

minos:/oracle/app/oracle/product/10g:Y

其中minos 为实例 ID

/oracle/app/oracle/product/10g ORACLE_HOME目录

Y表示允许使用 dbstart dbshut 启动和关闭该实例数据库,如果设置为N 表示不通过 dbstart dbshut 启动和关闭实例数据库

2数据库实例初始化文件 initSID.ora

每个数据库实例都有一个初始化参数文件,其缺省存放的路径为$ORACLE_BASE/dbs ,其名称为 initSID.ora

minos实例对应的参数文件为 initminos.ora,缺省存放路径为

/oracle/app/oracle/product/10g/dbs/initminos.ora

2tnsnames.ora文件

此文件类似于unix 中的hosts文件,提供tnsname到主机名或者ip的对应。

几个重要参数:

PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。

HOST:数据库侦听所在的机器的机器名或IP地址

PORT:数据库侦听正在侦听的端口,系统缺省值为1521

SERVICE_NAME:数据库实例的服务名

对于外场环境而言,tnsnames.ora文件一般存放在

$ORACLE_HOME/network/admin/tnsnames.ora

以下为一个完整的tnsnames.ora文件

#tnsnames.ora NetworkConfiguration File: /oracle/app/oracle/product/10g/network/admin/tnsnames.ora

# Generated by Oracleconfiguration tools.


MINOS_10.63.208.116 =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = minos)

   )

 )


RCT_10.63.208.116 =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = rct)

   )

 )


RCT =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = rct)

   )

 )


MINOS =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = minos)

   )

 )


EXTPROC_CONNECTION_DATA =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST =10.63.208.116)(PORT = 1521))

   )

   (CONNECT_DATA =

     (SERVICE_NAME = PLSExtProc)

   )

 )



2listener.ora文件

listener作为监听器进程的配置文件,接受远程对数据库的接入申请并转交给oracle的服务器进程。

几个重要参数:

SID_NAME:数据库实例名

ORACLE_HOME:数据库目录

PROTOCOL: 客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。

HOST: 数据库侦听所在的机器的机器名或IP地址

PORT:数据库侦听正在侦听的端口,系统缺省值为1521

对于外场环境而言,listener.ora文件一般存放在

$ORACLE_HOME/network/admin/ listener.ora

以下为一个完整的listener.ora文件

# listener.ora NetworkConfiguration File: /oracle/app/oracle/product/10g/network/admin/listener.ora

# Generated by Oracleconfiguration tools.

SID_LIST_LISTENER =

 (SID_LIST =

   (SID_DESC =

     (SID_NAME = PLSExtProc)

     (ORACLE_HOME = /oracle/app/oracle/product/10g/)

     (PROGRAM = extproc)

   )

   (SID_DESC =

     (SID_NAME = minos)

    (ORACLE_HOME = /oracle/app/oracle/product/10g/)

   )

   (SID_DESC =

     (SID_NAME = rct)

     (ORACLE_HOME = /oracle/app/oracle/product/10g)

   )

 )


LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521))

   )

 )

2数据库日常维护操作

以下操作语句执行前需要使用sqlplus或者PLSQL Developer客户端登录数据库进行操作。


 Sqlplus登录方式如下:spacer.gif


PLSQL Developer登录方式如下:

spacer.gif


1

2.1查询表空间信息


spacer.gif


spacer.gif


2.2查询数据库的连接情况

SELECT sid,serial#,username,program,machine,statusFROM v$session;    


spacer.gif

2.3查询数据库数据文件情况

SELECT file_name,statusFROM dba_data_files;


spacer.gif


Available 代表数据库文件均为可用状态

2.4查询数据文件的io情况

查询表空间读写情况

SELECT name,phyrds,phywrts

FROM V$datafiledf,V$filestat fs

WHERE df.file# =fs.file#;


spacer.gif

其中PHYRDS代表已完成的物理读次数,PHYWRTS代表DBWR完成的物理写次数

数据库的IO负载系统的瓶颈在于磁盘IO,所以一般可以通过操作系统的一些命令来确认一个系统是否是存在IO负载问题,比如iostatsar

spacer.gif

重点关注的几个指标就是idle值和iowait,但是idle值非常小(小于20%)或者iowait值非常大 (大于70%)时,说明IO出现问题。

由于IO问题涉及操作系统,存储系统,cp负荷及应用系统等一些因素,故当发现问题请及时联系硬件厂家进行分析处理

2.5查询redo log buffer的繁忙程度

SELECTretries.value/entries.value "Redo Log Buffer Retry Ratio"

FROM V$sysstat retries,V$sysstat entries

Where retries.name =  'redo buffer allocation retries'

And entries.name =  'redo entries';

spacer.gif


redo buffer allocation retries事件越少越好,该语句查询结果应该接近0或少于1%,否则要增加redo buffer

2.6查看等待事件

Select.username,s.program,s.status,se.event,se.total_waits,se.total_timeouts,se.time_waited,se.average_wait
from v$session s,v$session_event se
Where s.sid=se.sid
     And se.event not like 'SQl*Net%'
     And s.status = 'ACTIVE'
     And s.username is not null;


spacer.gif


select * from
(select event "waitevent",time_waited "time waited",
round(time_waited /(selectsum(time_waited)
from v$system_event),4) "%timewaited",
total_waits "waits",
round(total_waits /(selectsum(total_waits)
from v$system_event),4)"%waited"
from v$system_event  where wait_class!='Idle'
order by 2 desc)
where rownum <=30;


spacer.gif


%waited代表等待数据比,此值越小越好,此值越高代表等待事物数多,需要检查cpio

2.7判断undo表空间的使用情况

现场很多情况下undo有可能使用率到100%,这个和系统配置和事务大小,以及系统繁忙程度有关系。

Undo是否真正满了要怎么看,用sys用户登录sqlplus(前提,系统只有一个undotbs表空间)

使用以下语句查看undo表空间情况

$sqlplus  sys/oracle@minos as sysdba

SQL>select sum(bytes),status from dba_undo_extents group by status;

spacer.gif


一般来说外场环境都是创建一个undotbs,如果有多个undotbs的情况,请使用以下语句查询

SQL> select sum(bytes),status,tablespace_name from dba_undo_extents group by status,tablespace_name;

spacer.gif

每个undo extent可以有三种状态:

active:有活动事务在此extent

expired:已结束的事务,undo 信息超过undo_retention时间限制

unexpired:已经结束的事务,undo 信息未达到undo_retention时间限制

当一个事务开始它将会去寻找可用的undo block来存放undo信息,它将按照以下顺序请求undo space.

先去搜索拥有非active extentundo segment,如果没有发现,那么会去创建新的undosegment,如果空间不够不能创建,将返回错误。

所以如果undo虽然表空间满,但是有很多非active的空间的话,应该不会出现事务失败的问题


2.8查询数据库的字符集

使用system用户登录数据库,执行下面的sql语句查询数据库服务器的字符集:

SQL> select  userenv('language') from dual;

AMERICAN_AMERICA.ZHS16GBK

在客户端查询字符集

$ echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

2.9查询sql执行计划

explain plan for select *from tab;

select * fromtable(dbms_xplan.display)


spacer.gif

2.10如何执行数据库脚本

oracle用户登录服务器,将所需要执行的脚本放到服务器上

例如: 执行/home/omc 目录下的test.sql 脚本

$cd  /home/omc

$sqlplus /nolog

SQL>conn system/oracle@minos  

SQL>@test.sql

2.11如何drop offline数据文件

先关闭数据库实例

$sqlplus /nolog

SQL>conn / as sysdba

SQL>shutdown immediate

启动数据库实例至mount状态进行offline 操作

SQL>startup mount

SQL>alter databasedatafile ‘/datafile/u01/UEP_CAF_FM05.dbf’ OFFLINE DROP;

SQL>alter database open

2.12如何修改dbfiles

连接数据库

sqlplus /nolog

SQL> conn sys/oracle assysdba;


修改参数
SQL> show parameter db_files;
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                            integer     200

SQL> alter system set db_files=1000 scope=spfile;
System altered.

修改后关闭数据库
SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

修改完成后启动数据库
SQL> startup;

ORACLE instance started.

Total System Global Area  268435456 bytes

FixedSize                 1218892 bytes

VariableSize             75499188 bytes

Database Buffers         188743680 bytes

RedoBuffers               2973696 bytes

Database mounted.

Database opened.

SQL>show parameter db_files;

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_files                            integer     1000

SQL> exit

至此db_files参数修改工作完成

3数据库表空间扩容及迁移

2

3.1向表空间增加一个不自动扩展的数据文件

sys用户登录数据库

SQL> conn sys/oracle@minosas sysdba

在一个表空间增加一个数据文件,文件路径和大小需要自己修改成适合的位置和大小。

特别注意:路径和文件名的正确性,严格区分字母大小写

SQL> ALTER TABLESPACE UEP_CAF_FMADD DATAFILE '/datafile/u01/UEP_CAF_FM01.DBF' SIZE 4096M REUSE AUTOEXTEND OFF;

3.2创建一个表空间,增加一个自动扩展到最大值的数据文件

sys用户登录数据库

SQL> conn sys/oracle@minosas sysdba

创建一个表空间

SQL> CREATE TABLESPACE"TEST"

LOGGING

DATAFILE '/datafile/u01/TEST.dbf'SIZE 5M REUSE AUTOEXTEND

ON NEXT  5MMAXSIZE  300M EXTENT MANAGEMENT LOCAL UNIFORM

SIZE 1M SEGMENT SPACE MANAGEMENT  AUTO ;

增加一个数据文件,文件路径和大小需要自己修改成适合的位置和大小

特别注意:路径和文件名的正确性,严格区分字母大小写

SQL> ALTER TABLESPACE"TEST"

ADD

DATAFILE '/datafile/u01/test1.dbf'  SIZE  5M REUSE AUTOEXTEND

ON NEXT  5MMAXSIZE  300M


3.3数据表空间文件迁移

查询当前数据表空间文件位置并关闭数据库实例

$ sqlplus /nolog

SQL> connectsys/oracle@minos as sysdba

SQL> select file_namefrom dba_data_Files order by file_name;

SQL> shutdownimmediate;

SQL> exit;


移动数据库表空间文件的物理位置

mv/datafile/u01/system01.dbf /datafile/u02/system01.dbf

mv/datafile/u01/undotbs01.dbf /datafile/u02/undotbs01.dbf

mv/datafile/u01/sysaux01.dbf /datafile/u02/sysaux01.dbf

mv/datafile/u01/users01.dbf /datafile/u02/users01.dbf

mv/datafile/u01/uep.dbf /datafile/u02/uep.dbf

mv/datafile/u01/MINOS_RNS_PM_ORI03.dbf /datafile/u02/MINOS_RNS_PM_ORI03.dbf


&提示1:

system,undo,sysaus,user等系统表空间文件也可以作为数据文件进行迁移


启动数据库至mount状态

SQL> connect sys/oracleas sysdba

SQL> startup mount;


修改数据表空间文件在数据库中路径

SQL> alter databaserename file '/datafile/u01/system01.dbf' to '/datafile/u02/system01.dbf';

SQL> alter databaserename file '/datafile/u01/undotbs01.dbf' to '/datafile/u02/undotbs01.dbf';

SQL> alter databaserename file '/datafile/u01/sysaux01.dbf' to '/datafile/u02/sysaux01.dbf';

SQL> alter databaserename file '/datafile/u01/users01.dbf' to '/datafile/u02/users01.dbf';

SQL> alter databaserename file '/datafile/u01/uep.dbf' to '/datafile/u02/uep.dbf';

SQL> alter databaserename file '/datafile/u01/MINOS_RNS_PM_ORI03.dbf' to'/datafile/u02/MINOS_RNS_PM_ORI03.dbf';


启动实例,如果实例正常打开无报错且使用语句查询表空间路径已修改则表示迁移成功

SQL> alter databaseopen;

SQL> select file_namefrom dba_data_Files order by file_name;

SQL> commit;

SQL> quit;

3.4redo日志迁移

查询当前数据表空间文件位置并关闭数据库实例

$ sqlplus /nolog

SQL> connectsys/oracle@minos as sysdba

SQL> select g.member,v.status from v$log v, v$logfile g where v.GROUP#=g.GROUP#;

SQL> alter systemswitch logfile;

SQL> shutdownimmediate;

SQL> exit;


移动redo日志的物理位置

mv /datafile/u01/redo01.log/datafile/u02/

mv/datafile/u01/redo02.log  /datafile/u02/

mv/datafile/u01/redo03.log  /datafile/u02/


修改数据表空间文件在数据库中位置

SQL> connect sys/oracleas sysdba

SQL> startup mount;

SQL> alter databaserename file '/datafile/u01/redo03.log' to '/datafile/u02/redo03.log';

SQL> alter databaserename file '/datafile/u01/redo02.log' to '/datafile/u02/redo02.log';

SQL> alter databaserename file '/datafile/u01/redo01.log' to '/datafile/u02/redo01.log';


打开实例并切换日志

SQL> alter databaseopen;

SQL> alter systemswitch logfile;


验证迁移结果

SQL> select g.member,v.status from v$log v, v$logfile g where v.GROUP#=g.GROUP#;

SQL> commit;

SQL> quit;

3.5修改redo日志的大小

确认redo文件名和路径

$sqlplus /nolog

SQL>connsystem/oracle@minos

SQL> select member fromv$logfile;

MEMBER

-----------------------------------------------------------------

/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG

/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG

/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG


添加新的日志文件组

SQL> alter database addlogfile  group 4 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG'size 1024m;

Database altered.

SQL> alter database addlogfile  group 5 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG'size 1024m;

Database altered.

SQL> alter database addlogfile  group 6 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO06.LOG'size 1024m;

Database altered.


删除先前日志过小的日志组1、2、3

SQL> alter databasedrop logfile group 1;

Database altered.

SQL> alter databasedrop logfile group 2;

Database altered.

SQL> alter databasedrop logfile group 3;

Database altered.


删除日志组出现的错误,比如删除group 3时出现如下错误

alter database droplogfile group 3

*

ERROR at line 1:

ORA-01623: log 3 iscurrent log for instance minos (thread 1) - cannot drop

ORA-00312: online log 3thread 1: '/datafile/u01/minos/minos/redo03.log'

对于这种情况,请执行切换日志命令,命令如下:

SQL> alter systemswitch logfile;  

System altered.


执行该命令后,可以用以下命令查看当前日志组状态。

SQL> select * fromv$log;

GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- -------------------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- ------------  

        3          1         12 1073741824          1 NO INACTIVE

    16419468 31-OCT-11

        4          1         12 1073741824          1 NO CURRENT

    16419468 31-OCT-11

        5          1         11 1073741824          1 NO ACTIVE

    12110861 26-OCT-11

        6          1         11 1073741824          1 NO ACTIVE

    12110861 26-OCT-11

使用日志查询命令查出的结果中,必定有一个日志组为CURRENT状态

重复执行日志切换命令,可以使新增加的日志组状态由unused变为active

如果删除日志时报错,报错的日志组会转入active状态,该状态不能删除,至少等待5分钟,当该日志组自动从active状态转为inactive后,该日志文件才能被删除。

本步骤的删除、切换、查看日志命令可以反复执行,直到将group1,gourp2,gourp3日志都删除后,方可进入下一步。

查询所有的日志的状态,确认redo日志大小和状态

SQL> selectgroup#,bytes,members status from v$log;

   GROUP#     BYTES     STATUS

---------- --------------------

        4 1073741824          1

        5 1073741824          1

        6 1073741824          1


3.6临时表空间迁移

查询当前临时表空间大小并关闭数据库实例

$ sqlplus /nolog

SQL> connsys/oracle@minos as sysdba

SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensiblefrom dba_temp_files;---需要先查看原有临时表空间大小是多少

SQL> shutdown immediate


启动实例至mount状态后drop掉旧的临时表空间

SQL> connect sys/oracleas sysdba

SQL> startup mount

SQL> alter databasetempfile '/datafile/u01/temp01.dbf' drop including datafiles;


打开数据库实例,新建临时表空间

SQL> alter databaseopen;

SQL> ALTER TABLESPACETEMP ADD TEMPFILE ' /datafile/u01/temp.dbf' SIZE 3253MAUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED; ---标红值为临时表空间的大小,建议设置成与旧临时表空间一样的大小

SQL> selectfile_name,tablespace_name,bytes,maxbytes from dba_temp_files;

SQL> commit;

SQL> quit;

3.7控制文件迁移

登录数据库查询控制文件位置

$sqlplus /nolog

$conn sys/oracle@minos assysdba

SQL> select name fromv$controlfile;

NAME

--------------------------------------------------------------------------------

/datafile/u02/minos/control01.ctl

/datafile/u02/minos/control02.ctl

/datafile/u02/minos/control03.ctl


修改数据库系统中控制文件路径

SQL>alter system setcontrol_files='/datafile/u02/control01.ctl',

'/datafile/u02/control02.ctl',

'/datafile/u02/control03.ctl'scope=spfile;

SQL>shutdown immediate


修改控制文件物理路径

$cp  /datafile/u01/control*  /datafile/u02/


连接数据库测试实例启动

$sqlplus /nolog

SQL>conn sys/oracle assysdba

SQL>startup


实例启动成功后,删除旧的控制文件

$rm  /datafile/u01/control*


3.8重建及切换undo表空间

SYS用户以SYSDBA身份登陆到数据库。

$sqlplus /nolog

SQL>conn sys/oracle assysdba


创建新的UNDO表空间

SQL>CREATE UNDOTABLESPACE "UNDOTBS2"

DATAFILE'/datafile/u02/minos/undotbs02.dbf' SIZE 16384M REUSE AUTOEXTEND  ON NEXT 5120K MAXSIZE  32767M


切换UNDO表空间为新的UNDO表空间

SQL>alter system set undo_tablespace=undotbs2scope=both;


等待原UNDO表空间所有UNDO SEGMENT OFFLINE

SQL>selectusn,xacts,status from v$rollstat;

STATUS字段的值是否有PENDING OFFLINE值,如果有就等待一会再执行上面的语句观察,知道没有,再执行下一步操作

删除原UNDO表空间

SQL>drop tablespaceundotbs1 including contents and datafiles;

4数据库常用备份方法

4.1逻辑备份导入导出的常用命令

2按用户导出,导入

$expuep4x/U_tywg_2008@minos file=/export/home/test.dmp  log=/tmp/exp_test.log


$impuep4x/U_tywg_2008@minos  full=y  file=/export/home/test.dmp  log=/tmp/exp_test.log


2多个用户导出,导入

exp system/oracle@minos owner=(uep4x,caffm4x)file=/export/home/test.dmplog=/tmp/exp_test.log


imp system/oracle@minos full=y  file=/export/home/test.dmp  full=y  log=/tmp/exp_test.log


2按表导出,导入

exp minos_pm/u_tywg_2008parfile=test.dat

其中PARFILE代表传递给导出的参数文件的名字,这个文件将包含所有参数的入口项。

file=/oracle/pmoneday.dmp   ----定义导出数据的路径及名称

tables=(A_TD_TDCCRM,\

A_TD_TDCBHORNC,\

A_TD_TDCHHORNC,\

A_TD_TDIRATHO,\

A_TD_TDRABASN)              ----定义需要导出的表

rows=y                      ----定义是否导出行

statistics=none             ---- 定义是否分析对象

query=" where collecttime<to_date('2007-11-2200:00:46','YYYY-MM-DD HH24:MI:SS') and collecttime>to_date('2007-11-2100:00:46','YYYY-MM-DD HH24:MI:SS') " ----定义导出表的查询条件


Imp minos_pm/u_tywg_2008 ignore=yrow=y file=/oracle/pmoneday.dmp log=/tmp/imp.log


4.2数据泵导入导出备份常用命令

10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXPIMP工具,还提供了数据泵导出导入工具EXPDPIMPDP

使用EXPDPIMPDP时应该注意的事项:
EXPIMP是客户段工具程序,它们既可以在客户端使用,也可以在服务器段使用。
EXPDPIMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。

数据泵工具导出导入的步骤:
1、创建DIRECTORY

$sqlplus  sys/oracle@minos as sysdba

SQL>create directorydir_dp as '/datafile/u01/backup/';

2、授权并查看目录及权限

SQL>Grant read,write ondirectory dir_dp to minos_pm;

SQL>SELECT privilege,directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d
WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;

3、执行导出导入

expdp minos_pm/u_tywg_2008schemas=minos_pm directory=dir_dp dumpfile=expdp_test.dmplogfile=expdp_test1.log;

    

impdp minos_pm/u_tywg_2008 schemas=minos_pm  dumpfile=expdp_test.dmp logfile=expdp_test.logdirectory=dir_dp job_name=my_job


4.3RMAN增量备份步骤

9i起, exp的增量备份功能已经被废弃,exp的增量备份是8i的功能,从9i起就转向rman

如果是联机热备份,也就是说数据库打开的情况下用rman备份,需要数据库启动归档模式。增量备份rman下有几个级别,level 0应该是增量起点,以后的增量备份应该使用level 1来进行。增量备份的level 0备份和整库全备份效果是一样的,唯一不同的是整库备份不能用于增量的备份恢复。增量备份后面的一级差异或者累计备份,理论上都是备份前一次增量备份后变化的内容。如果变化比较多的话,文件会大一点,如果变化不多,文件就会很小。

备份文件的如果要指定路径名称,可以使用通配符比如%U这样文件就不会重名了,如:format 'C:\BACKUP\%U',简单点可以不指定,会有缺省路径和名称。

以联机热备份为例,数据库版本为oracle10g,操作步骤举例如下:


打开数据库归档模式

shutdown normalshutdown immediate关闭数据库

$sqlplus sys/oracle@minosas sysdba

SQL> shutdownimmediate;

启动数据库到mount状态

SQL> startup mount;

启用或停止归档模式, 如果要启用归档模式,此处使用alter database archivelog 命令。

SQL> alter databasearchivelog;

           Database altered.

打开数据库

SQL> alter databaseopen;

           Database altered.

察看归档模式是否打开

SQL> archive log list;

Database log mode             Archive Mode---已打开

Automatic archival             Enabled—自动归档

Archive destination            /opt/oracle/oradata/conner/archive

Oldest online logsequence      148

Next log sequence toarchive    151

Current log sequence          151

如果需要停止归档模式,此处使用alter database noarchivelog 命令

关闭数据库

SQL> shutdownimmediate;

启动数据库到mount状态

SQL> startup mount;

关闭归档模式

SQL> alter databasenoarchivelog;

           Database altered.


打开数据库

SQL> alter databaseopen;

           Database altered.

察看归档模式是否关闭

SQL> archive log list;

           Database log mode              No Archive Mode

           Automatic archival             Enabled

           Archive destination            /opt/oracle/oradata/conner/archive

           Oldest online log sequence     149

           Current log sequence           152

Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。

pfile/spfile中设置如下参数:log_archive_start = true


重启数据库此参数生效,此时数据库处于自动归档模式。

也可以在数据库启动过程中,手工执行:archive log start

使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。


Oracle10g开始,log_archive_start参数已经废除

$rman

rman>connect targetsys/oracle@minos

开始做一次增量的0级备份

rman>BACKUP INCREMENTALLEVEL 0 DATABASE;

sqlplus中进行一些操作比如:创建一张表,插入一条记录

然后做一次增量的1级差异备份

rman>BACKUP INCREMENTALLEVEL 1 DATABASE;


sqlplus中再进行一些其它操作,比如:再插入一条记录。

下面可以依次类推,做一些操作然后作增量的1级差异备份。


作数据库的恢复操作

关闭数据库,启动到mount模式

rman>shutdownimmediate;

rman>startup mount;

恢复数据库,应用上面的增量备份

rman>restore database;

不完全恢复到某个时间点

rman>recover databaseuntil time '2008-03-13 16:56:43';  

(rman>list backup 可以看到所有备份操作的信息,从中可以查到比如:第二次增量备份的时间点,这样可以作一个不完全恢复到某个时间点,当然也可以完全恢复recover database)

打开数据库同时切换日志,如果是完全恢复就不用切换日志,直接打开数据库即可(alter databaseopen)

rman>alter databaseopen resetlogs;



5数据库常见问题排查

5.1如何初步判断数据库有问题

oracle用户登录服务器执行如下命令:

$sqlplus /nolog

SQL>connminos_pm/u_tywg_2008@minos        

SQL>select tname fromtab

查看是否可以正常返回所有表名

如果以上2条命令执行有异常,则说明oracle存在问题。

5.2如何获取排查数据库问题所需的日志

数据库日志位置:$ORACLE_BASE/admin/sid_name/bdump/alert_sid.log

服务器日志:server-XXXXXX.log


5.3oracle无法启动

手动启动oracle:

$sqlplus /nolog

SQL>conn sys/oracle assysdba;

SQL>startup


如果执行完以上3步报错的话,需要执行以下步骤尝试恢复:

$sqlplus /nolog

SQL>conn sys/oracle assysdba;

SQL>startup mount

SQL>recover database

SQL>alter database open


如果依旧不行需要查看数据库日志确认具体原因

常见几种可能情况:

2oracle磁盘没有挂载,启动提示:找不到control01.dbf

这种情况,需要检查提示的路径下是否有该文件,检查系统硬盘或者磁阵mount是否正常


2数据文件丢失,启动提示:找不到minos_rns_XXX.dbf

需要检查这个文件是否在对应路径下,文件名与大小写是否一致,是否对这个文件进行过迁移。

如果确实找不到这个文件了,只能重建表空间


2out of memory错误

此类问题是系统的sga-max值设置太小导致。或者是oraclesga设置太大了。可以按照如下操作:

      1)重新设置系统sga_max值:

用如下命令修改/etc/system文件内容。

# vi system

修改Solaris系统参数,在文件/etc/system中添加:

set noexec_user_stack=1

再使用命令添加参数:

# projadd -U oracle -G dba -p 1234 -c "oracleparameters" user.oracle

# projmod -sK "project.max-shm-memory=(priv,18g,deny)" user.oracle

# projmod -sK"project.max-shm-ids=(priv,100,deny)" user.oracle

# projmod -sK"project.max-sem-ids=(priv,100,deny)" user.oracle

# projmod -sK"process.max-sem-nsems=(priv,256,deny)" user.oracle  

注意:根据服务器物理内存的不同

# projmod -sK "project.max-shm-memory=(priv,18g,deny)" user.oracle参数的设置也需要做相应改动,按照以下列表

物理内存

参数设置

16G

9G

32G

18G

64G

36G

修改完成后,保存退出,重启计算机使参数生效。

#init 6


      2)修改数据库配置

bash-3.00$ id

uid=101(oracle)gid=101(dba)

$ sqlplus sys/oracle@minosas sysdba

SQL> shutdown immediate

SQL> create pfile fromspfile;  

SQL> exit

$ cd $ORACLE_HOME/dbs/

修改pfile文件,vi initminos.ora

找到*.sga_target=1610612736    

由原来的大小修改为如下规划:

安装模式1SGA=943718400

安装模式2SGA=4294967296

安装模式3SGA=8589934592

安装模式4SGA=11811160064

安装模式5SGA=17179869184

$export ORACLE_SID=minos

$sqlplus / as sysdba

SQL>create spfile frompfile;

SQL>startup

5.4如何修改oracle系统参数

在某些情况下,需要修改系统参数,如processes数,sga大小,pga大小,游标数等等。这些都可以在pfile中修改,步骤如下:

bash-3.00$ id

uid=101(oracle)gid=101(dba)

$ sqlplus sys/oracle@minosas sysdba

SQL> shutdown immediate

SQL> create pfile fromspfile;  

SQL> exit

$ cd  $ORACLE_HOME/dbs/

找到对应的参数,修改后保存。

$export ORACLE_SID=minos

$sqlplus / as sysdba

SQL>create spfile frompfile;

SQL>startup

5.5如何解决数据库用户被锁定问题

使用sqlplus登录数据库发现数据库,提示用户被锁定。

需要使用conn sys/oracle@SID as sysdba;登录数据库。

执行解锁语句(ALTER USER USER_NAME ACCOUNT UNLOCK;)