xingnengyouhua

来源:互联网 发布:好用的化妆品 知乎 编辑:程序博客网 时间:2024/06/16 21:50

备份数据库

备份整个数据库

(1)       创建一个备份命令文件,文件名为backup_db.cmd

存放在/opt/oracle/archive/bin目录下,它将完成对目标数据库的全备份,并备份所有归档日志及删除已备份的归档日志。

backup_db.cmd备份脚本内容:

run {

#backup full database

backup  skip inaccessible format '/opt/oracle/archive/bkup_%T_%s_%p.dat' (database);

#backup  archive redolog include  current

sql 'alter system archive log current';

backup skip inaccessible format '/opt/oracle/archive/bkup_%T_%s_%p.arc'    (archivelog all  delete input);

}

 

创建shell文件,文件名为backup_db.sh,存放在/opt/oracle/archive/bin目录下

backup_db.sh的内容如下:

rman target / cmdfile=/opt/oracle/archive/bin/backup_db.cmd 1>>/opt/oracle/archive/log/backup.log 2>&1

 

执行备份脚本backup_db.sh

检查全备份是否成功:

$Cd /opt/oracle/archive/log

用编辑器打开backup.log,看日志里是否报错;再到/tellinshare/sms/OracleBackup目录下看备份文件是否生成;如果备份成功,则可以进行全库恢复。

 

修改数据库

1)导出数据

导出该用户所有数据以及对象:

SQL>Exp username@ora11g  owner=username file=’/root/chbsmp/dumpfile’

导出该用户的全部数据以及对象,分多个文件存放(这里用到参数文件):

(1)创建参数文件(就是将多个参数写到一个文件中)

file=’/root/chbsmp/dumpfile1’, ’/root/chbsmp/dumpfile2’, ’/root/chbsmp/dumpfile3’

fileSIZE=2000m

owner=test

rows=y

buffer=1024

compress=y

feedback=300

(2)执行命令,带上参数文件

SQL>exp username@ora11g parfile=ePFILE

 

导出单个表的全部数据:

Sql>Spool c:\temp.txt

Sql>Select * from表名

Sql>Spool out

2)增加字段

Alter table table_name Add

( colname1   coltype1,

Colname2   coltype2

);

3)修改字段

Alter table table_name Modify

(  colname1   coltype1,

Colname2   coltype2

);

 

4)导入数据

导入该用户的全部数据:

SQL>imp username@ora11g  file=’/root/chbsmp/dumpfile’

fromuser=username touser=username rows=y ignore=y;

导入单个表的全部数据:

        1)控制文件load.ctl

Load data

Infile '数据文件名'

Append                            --往表中追加数据时有此项

Into table 表名

      (

          字段1             position(*)     char(l1),

          字段2         position(*)     char(l2),

          ……

          字段n        position(*)     char(ln)

          )

        2)执行命令,带上控制文件:

sql> sqlldr scott/tiger control=load.ctl log=ulcase6.log direct=true

 

导不进去的时候,我们需要查表结构:SQL>desc表名

 

5)表存放空间整理

alter table Table_Name MOVE

6)创建索引

create index summit.item_quantity on summit.item(quantity-quantity_shipped);

7)重建索引

alter index idx_commoninfo rebuild

alter index idx_commoninfo rebuild online

启动数据库

读取参数文件,获得控制文件位置(nomount

SQL>STARTUP  MOUNT;

==》

读取控制文件,获得数据文件,日志位置(mount

SQL>STARTUP  MOUNT;

==》

读取数据(open

恢复数据库

1)       将数据库停掉

SQL>shutdown immediate;

2)     将数据库以mount方式启动

SQL>STARTUP  MOUNT;

3)       在主节点数据库运行以下恢复数据库语句

$rman target / nocatalog

rman>run{

restore database;

restore archivelog all;

recover database;

sql “alter database open”;

}

以上命令执行成功后,数据库就被成功恢复。

Oracle需要做的优化:

调整SGA大小

调整表空间

调整表结构

重建索引

问题答复:

1、如何判断checkpoint时间是否过长?有什么参数可调整?

Checkpoint时间在Oracle10g之后都会自动调整。

 

2Oracle数据库是否存在某些进程占用CPU过高(类似于Informixoninit)?有哪些参数可调整?

答复:存在某些进程占用CPU过高

查找导致此问题的SQL语句,做调整或者优化(语句本身优化和SQL索引优化):

1) 使用top命令检查系统的运行情况,

load averages:  0.38,  0.38,  0.38                                                                          20:33:27

198 processes: 197 sleeping, 1 on cpu

CPU states: 50.0% idle,  1.5% user,  52.5% kernel,  0.0% iowait,  0.0% swap

Memory: 16G real, 13G free, 12G swap free

 

  PID USERNAME THR PRI NICE  SIZE   RES STATE   TIME    CPU COMMAND

  9227 oracle     1  59    0    0K    0K sleep   2:11  50.02% oracle

 5334 zhoubo    44  49    0   42M   39M sleep  16:23  0.61% wapgw_plat

24744 csp       18  59    0   37M   32M sleep  14:41  0.36% wapgw_wap

26350 zhoubo    21  59    0   41M   38M sleep  11:56  0.29% wapgw_radius

13044 lixiang   17  59    0   34M   31M sleep  44:56  0.27% wapgw_wap

  593 oracle     1  29    0    0K    0K sleep   3:08  0.07% tnslsnr

 8518 lixiang   31  59    0  270M  176M sleep   6:17  0.05% wapgw_http

23891 csp       28  59    0  265M  174M sleep   1:45  0.04% wapgw_http

20820 oracle     1  59    0 2512K 1928K cpu0    0:00  0.04% top

15047 zhoubo    20  59    0  190M  130M sleep   0:23  0.03% wapgw_http

 9217 oracle     1  59    0    0K    0K sleep   2:11  0.02% oracle

 9225 oracle     1  59    0    0K    0K sleep   2:13  0.02% oracle

 9229 oracle     1  59    0    0K    0K sleep   2:13  0.02% oracle

 9215 oracle     1  59    0    0K    0K sleep   2:12  0.02% oracle

 9221 oracle     1  59    0    0K    0K sleep   2:05  0.02% oracle

2)通过如下getsql.sql脚本获得相关SQL语句

select sql_text from v$sqltext a

where (a.hash_value,a.address) in (

  select decode(sql_hash_value,0,prev_hash_value,sql_hash_value),

decode(sql_hash_value,0,prev_sql_addr,sql_address)

  from v$session b

  where b.paddr=(select addr from v$process c where c.pid = '&pid'))

order by piece ASC

/

PID->SESSION->SQL(这里与informix是相同的)

蓝色确定了processsession的关系,并找到session

黑色确定了sessionsql的关系,并找到sql

 

执行此脚本首先输入一个PID(Process ID)就是使用top或者ps看到的PID.通过PIDv$process.spid相关联,可以获得Process的相关信息,进而通过v$process.addrv$session.paddr相关联,就可以获得session的相关的所有信息.再结合v$sqltext,就可以获得当前session正在执行的SQL语句.通过v$process视图,我们就可以把操作系统与数据库相关联起来      

 

3)获取Sql的执行计划,看看是否用到索引

explain plan for select * from t_mytable where f1 = :1;

@?/rdbms/admin/utlxpls;

 

V$SQL_PLAN存储了实际执行计划

 

 

3、如何判断索引是否失效?恢复索引的步骤?

1)使用SQL获取执行计划,看看是否用到索引

explain plan for select * from t_mytable where f1 = :1;

@?/rdbms/admin/utlxpls;

 

在此总结一下Oracle数据库查询时索引没起作用的几点原因

在Instance级别所用的是all_rows的方式;

表的统计信息没有更新(最可能的原因);

表很小,Oracle的优化器认为不值得走索引。

解决方法:

可以修改init.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用Hint(提示);

使用analyze table table_name delete statistics语句删除统计信息或及时更新统计信息;

表小不走索引是正确的。

2) 确定表的大小(Select Count (*) from表名)

如果表大,可能是长时间没有统计更新

可以drop索引,再重建此索引。

 

Hint(提示):

Oracle Hint是一种让DBA自行指定优化器的行为的方法,当优化器的优化结果不能满足我们的要求时我们可以通过Hint的方法人为地指定查询计划。理论上一个优秀的优化器是不用人去干预它的行为,但"智者千里必有一失",有时优化器也不是万能的,也需要人的智慧去补充其行为,Hint就是这个最后的银弹。

 

 

4、如何判断表的性能?以及表性能的恢复步骤?

1)使用SQL获取执行计划,看看是否用到索引

explain plan for select * from t_mytable where f1 = :1;

@?/rdbms/admin/utlxpls;

 

2)查看表定义语句是否合理

每个表创建时oracle都会自动为此表分配一个数据段,通过设置合理的PCTfree(空闲百分比)和PCTused参数控制表的可用空间

PctFree控制插入,PCTused控制更新。PCTused启作用是在达到PctFree之后

 

表性能的恢复步骤

    高优

重建索引

重写SQL语句

重建表

5、如何判断数据库的IO性能?

数据库IO性能如果存在,应该表现在CPU占用高和磁盘IO高上面。

CPU占用高,我们根据问题2可以找出问题。

数据库空间所在的磁盘IO高,我们也是找SQL语句。

 

表的高水平位(High water mark)是表曾经最大的占用空间位的标记位。在表做全表扫描时会读到高水平位的位置(哪怕表中没有数据)。所以要消除高水平位让表扫描的速度更快。

SQL>truncate table Table_Name

 

6、如何判断内存性能?(是否存在内存泄露)

回到操作系统层次。

IBM svmon P进程PID

7、数据库的锁性能有什么参数可调整?

???

0 0
原创粉丝点击