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登录方式如下:
PLSQL Developer登录方式如下:
1
2.1查询表空间信息
2.2查询数据库的连接情况
SELECT sid,serial#,username,program,machine,statusFROM v$session;
2.3查询数据库数据文件情况
SELECT file_name,statusFROM dba_data_files;
Available 代表数据库文件均为可用状态
2.4查询数据文件的io情况
查询表空间读写情况
SELECT name,phyrds,phywrts
FROM V$datafiledf,V$filestat fs
WHERE df.file# =fs.file#;
其中PHYRDS代表已完成的物理读次数,PHYWRTS代表DBWR完成的物理写次数
数据库的IO负载系统的瓶颈在于磁盘IO,所以一般可以通过操作系统的一些命令来确认一个系统是否是存在IO负载问题,比如iostat,sar 等
重点关注的几个指标就是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';
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;
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;
值%waited代表等待数据比,此值越小越好,此值越高代表等待事物数多,需要检查cp和io
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;
一般来说外场环境都是创建一个undotbs,如果有多个undotbs的情况,请使用以下语句查询
SQL> select sum(bytes),status,tablespace_name from dba_undo_extents group by status,tablespace_name;
每个undo extent可以有三种状态:
active:有活动事务在此extent上
expired:已结束的事务,undo 信息超过undo_retention时间限制
unexpired:已经结束的事务,undo 信息未达到undo_retention时间限制
当一个事务开始它将会去寻找可用的undo block来存放undo信息,它将按照以下顺序请求undo space.
先去搜索拥有非active extent的undo 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)
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开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP。
使用EXPDP和IMPDP时应该注意的事项:
EXP和IMP是客户段工具程序,它们既可以在客户端使用,也可以在服务器段使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在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 normal或shutdown 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
需要检查这个文件是否在对应路径下,文件名与大小写是否一致,是否对这个文件进行过迁移。
如果确实找不到这个文件了,只能重建表空间
2报out of memory错误
此类问题是系统的sga-max值设置太小导致。或者是oracle的sga设置太大了。可以按照如下操作:
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
由原来的大小修改为如下规划:
安装模式1:SGA=943718400
安装模式2:SGA=4294967296
安装模式3:SGA=8589934592
安装模式4:SGA=11811160064
安装模式5:SGA=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;)
转载于:https://blog.51cto.com/lucifer119/1222558