Oracle高级培训 第6课 学习笔记

 
Oracle高级培训 第6课 学习笔记
 
作者:JackYang (JackYang.sh@gmail.com)
日期:2006-10-18
 
本课包含多个实验,目前还未通过上机验证。
 
TSPITR(表空间基于时间点的恢复)
为了减少损失,推出TSPITR。比DBPITR高级。
 
设计思想:
假如一个生产数据库的某个TABLE被误删除了。
 
先对原来的生产数据库CLONE,然后再造一个辅助数据库和原来的一模一样。
CLONE出来的数据库叫做辅助数据库,原来的数据库叫生产数据库。对辅助数据库做TSPITR。把辅助数据库恢复到备份点。
然后把辅助数据库包含被删除表的表空间EXPORT(导出)。把导出的表空间,导入生产数据库。这样生产数据库中,其它的表空间不受影响,仅仅是受损表空间恢复。
在辅助数据库上所作的恢复操作和恢复一个表的操作是一样的。
 
TSPITR的具体步骤参考老师提供的文件TSPITR.txt
(一)Prepare Product Database:
1.         Checking self contained for recovery set
sql>execute dbms_tts.transport_set_check('DATA2',true);
sql>select * from transport_set_violation;
          no rows selected
 
检查表空间是否自包含。
对数据库克隆只要包含系统表空间,临时表空间和受损的表空间。其它表空间不用CLONE到辅助表空间中。
自包含的意思:受损表空间中的一个表有index。这个index被其它表空间使用,那么那个表空间也要被CLONE。
 
2.         simulate before fault:
 
sql> create table dept1 tablespace data1 as select * from scott.dept;
    sql> create table dept2 tablespace data2 as select * from scott.dept;
    sql> insert into dept1(deptno,dname) values(28,'before drop');
    sql> insert into dept2(deptno,dname) values(28,'before drop');
    sql> commit;
    sql> alter system archive log current;
 
3.         Backup recovery set and auxiliary set before TSPITR time
 
sql> alter database begin backup;
sql> host copy d:/ora101g/oradata/db1/*.dbf d:/backup/db1
sql> alter database end backup;
sql> alter system archive log current;
sql> alter database backup controlfile to
       2 'D:/backup/db1/conl.ctl' reuse;
sql> alter system archive log current;
 
对数据库进行备份
 
4.         simulate after fault:
sql>select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
          recoding the sysdate!
sql> truncate table dept2;
sql> insert into dept1(deptno,dname) values(38,'after drop');
sql> commit;
sql> alter system archive log current;
 
取出时间。
删除表,模拟损坏的操作。
插入一行数据,以便验证恢复结果是否成功。
 
(二)Prepare AUXiliary DataBase:
1.         Prepare OS environment:
 
dos>mkdir F:/auxdb1
dos>mkdir F:/auxdb1/bdump
dos>mkdir F:/auxdb1/udump
dos>mkdir F:/auxdb1/arc
 
创建辅助数据库
 
2.         create oracle service for AUXiliary Database:
dos>oradim -new -sid AUXDB1 -intpwd ora123
 
创建服务
 
3.         Prepare parameter file for AUXiliary database:
(dos>copy D:/ora101g/database/initDB1.ora
                       D:/ora101g/database/iniAUXDB1.ora
EDIT D:/ora101g/database/initAUXDB1.ora:)
 
       老师提供文件initAUXDB1.ora的内容如下:
db_unique_name='AUXDB1'
db_file_name_convert='D:/ora101g/oradata/db1','F:/auxdb1'
log_file_name_convert='D:/ora101g/oradata/db1','F:/auxdb1','D:/ora101g/oradata/db1','F:/auxdb1'
background_dump_dest='F:/auxdb1/bdump'
compatible='10.1.0.2.0'
control_files=('F:/auxdb1/con1.ctl','F:/auxdb1/con2.ctl')
core_dump_dest='F:/auxdb1/cdump'
db_name='DB1'
remote_login_passwordfile='EXCLUSIVE'
sessions=20
undo_management='AUTO'
undo_tablespace='undotbs'
user_dump_dest='F:/auxdb1/udump'
log_archive_dest_1='location=D:/backup/db1/arc'
log_archive_format='%s_%t_%r.arc'
service_names='AUXDB1'
instance_name='AUXDB1'
 
 
复制初始化参数文件,并进行小修改
       其中:
       db_name不变
       加db_uniqure_name
 
       db_file_name和log_file_name_convert 把原来DB1的路径转化为辅助数据库的路径。
 
       log_archive_dest_1不变,把克隆的数据库恢复时,要用到归档日志。辅助数据库没有归档日志,生产数据库有归档日志,所以这个路径不改变。
改service_name和instance_name
 
4.         RESTORE Recovery SET and auxiliary SET
sql>host copy D:/backup/db1/*.dbf F:/auxdb1
sql>host copy D:/backup/db1/con1.ctl F:/auxdb1/con1.ctl
sql>host copy D:/backup/db1/con1.ctl F:/auxdb1/con2.ctl
 
把原来生产数据库的备份文件,copy到辅助数据库里面去。
 
5.         Start AUX DB:
 
     sql>connect sys/ora123@AUXDB1 as sysdba
     sql>startup nomount
     sql> alter database mount clone database;
     sql> alter database datafile 'F:/auxdb1/SYS01.DBF' online;
     sql> alter database datafile 'F:/auxdb1/UNDOTBS.DBF' online;
     sql> alter database datafile 'F:/auxdb1/data2.dbf' online;
 
     sql> recover database until time '2007-04-01 17:28:43' using backup controlfile;
     sql> alter database open resetlogs;
     check the table dept2 exist:
     sql> select * from dept2;
     sql> alter tablespace temp add tempfile 'F:/auxdb1/temp.dbf' size 5M reuse;
 
启动辅助数据库
进行CLONE操作
 
using backup controlfile是指使用备份的控制文件。
克隆的时候不能修改控制文件,执行recover的时候能够修改控制文件,因为recover能够利用redo log
 
(三) EXPort and IMPort Recovery Set
1.         EXPort Recovery Set
dos>exp 'sys/ora123 as sysdba' point_in_time_recover=y tablespaces=data2
          file=F:/auxdb1/data2.dmp
         Export terminated successfully without warnings.
 
用sysdba登录,用exp命令导出指定的表空间。
 
2.         IMPort Recovery Set
sql>connect sys/ora123@DB1 as sysdba
sql> alter tablespace data2 offline;
 
dos>copy F:/auxdb1/data2.dbf D:/ora101g/oradata/db1
dos>imp 'sys/ora123@DB1 as sysdba' point_in_time_recover=y datafiles=
           D:/ora101g/oradata/db1/data2.dbf file=F:/auxdb1/data2.dmp
          Import terminated successfully without warnings.
 
连接到生产数据库上
       使生产数据库中损坏的表空间offline。
 
3.         Check the TSPITR result:
sql> alter tablespace data2 online;
 
sql>select * from dept2;
sql>select * from dept1;
 
检查恢复的结果
       被删除的表要恢复。
       违背删除的表,记录都要在
 
4.         delete AUXiliary DB
删除辅助数据库
 
实验一:
实验目的:实践TSPITR
1.         SQL> select * from dept1;
 
2.         SQL> select * from dept2;
       现在数据库中有两个表dept1和dept2。
故障是表空间data1中的dept1被误删除,恢复表空间dept1,且不影响到表空间data2中的dept2
 
3.         SQL> alter database begin backup;
 
4.         SQL> host copy e:/ora01g/oradata/db1/*.dbf e:/backup/db1/hot
 
5.         SQL> alter database end backup;
 
6.         SQL> alter database backup controlfile to ‘E:/backup/db1/hot/con1.ctl’ reuse;
 
7.         SQL> alter system archive log current;
       备份好之后,立刻对数据库做一次手工归档。
 
8.         SQL> select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS’) from dual;
       取一个用于恢复的时间
 
9.         SQL> drop table dept1;
       删除表,模拟故障
 
10.     SQL> select * from dept1;
       查询失败
 
11.     SQL> insert into dept2(deptno,dname) values (99,’after 1908’);
 
12.     SQL> insert into dept2(deptno,dname) values(66,’after 1908’);
       插入两条数据,用于验证恢复的结果是否成功。
 
13.     另外打开一个终端窗口来CLONE数据库
oradim –new –sid AUXDB1 –intpwd ora123
创建辅助数据库的服务
 
14.     COPY过来初始化参数文件,并进行修改。
修改了:
db_file_name_convert
log_file_name_convert
background_dump_dest
user_dump_dest
 
control_files
core_dump_dest
service_name
instance_name
 
然后利用初始化参数文件启动数据库
 
15.     copy e:/backup/db1/hot/*.dbf e:/auxdb1
e:/auxdb1中的data2.dbf是不需要COPY的
 
16.     copy e:/backup/db1/hot/con1.ctl e:/auxdb1
 
17.     copy e:/backup/db1/hot/con1.ctl e:/auxdb1/con2.ctl
copy控制文件
 
18.     sqlplus /nolog
 
19.     SQL> connect sys/ora123@AUXDB1 as sysdba
 
20.     SQL> startup nomount
 
21.     SQL> alter database mount clone database;
 
22.     SQL> alter database datafile ‘e:/auxdb1/system01.dbf’ online;
 
23.     SQL> alter database datafile ‘e:/auxdb1/undotbs.dbf’ online;
 
24.     SQL> alter database datafile ‘e:/auxdb1/sysaux01.dbf’ online;
 
25.     SQL> alter database datafile ‘e:/auxdb1/data1.dbf’ online;
 
26.     SQL> recover database until time ‘2006-10-17 19:08:05’ using backup controlfile;
       恢复操作
       没成功,把生产数据库再归档一次。
       回到生产数据库的终端窗口进行下面这个操作
       SQL> alter system archive log current;
 
27.     SQL> alter database open resetlogs;
 
28.     SQL> select * from dept1;
       dept1表被恢复出来了,但目前实在辅助数据库中,接着要用exp命令导出。
 
29.     SQL> host exp ‘sys/ora123@AUXDB1 as sysdba’ point_in_time_recover=Y tablespaces=data1 file=data1.dmp
       最后看到屏幕上显示’Export terminated successfully without warnings’这句话,才表示导出操作成功。
       省略了检查自包含的步骤。
 
30.     回到生产数据库的终端窗口
 
31.     SQL> alter tablespace data1 offline;
 
32.     SQL> host copy e:/auxdb1/data1.dbf e:/ora01g/oradata/db1
 
33.     SQL> host imp ‘sys/ora123@db1 as sysdba’ point_in_time_recover=Y datafiles=’e:/ora01g/oradata/db1/data1.dbf’ file=data1.dmp
       最后看到屏幕上显示’Import terminated successfully without warnings.’这句话,才表示导入操作成功。
 
34.     SQL> alter tablespace data1 online;
 
35.     SQL> select * from dept1;
 
36.     SQL> select * from dept2;
       前面插入的两条记录都在,99 after 1908和66 after 1908
 
 
以下出现的页码与《Oracle9i 数据库管理基础II Ed 1.1 Vol.2.pdf》对应
指南下载地址:
 
P121
配置ORACLE服务器的共享模式
 
之前用的都是ORACLE服务器的专用模式
在专用服务器模式下,每个用户进程对应一个服务器进程。浪费资源。
 
在共享服务器模式下,一个服务器进程可以同时为多个用户服务。
 
P125
除了有共享服务进程(Snnn),一定还要有调度程序。
 
P127
ORACLE共享服务器的优点
 
调度程序进行调度,来实现负载均衡
 
P128
TNSNAME.ORA文件的内容
有SERVER=DEDICATED,采用专用服务器模式。如果没有这个参数,ORACLE会尽量采用共享服务器模式
 
使用共享服务器模式,不能发shutdown和startup命令。发这两个命令必须用专用服务器模式建立连接。
 
P129
共享服务器模式下,不能使用SET ORACLE_SID的方式来连接数据库,而必须使用网络连接方式,因为要先连接到ORACLE的侦听器上。
 
P130
这图非常重要。
连接步骤
用户发出请求,请求送到监听程序。监听程序把请求发到三个调度程序中,最空的一个调度程序。所有的调度程序共享一个请求队列(一个实例只有一个请求队列)。
共享服务器进程一有空,就去请求队列看是否有请求,有就拿来提供服务。
每个调度程序有它自己的响应队列。响应队列和调度程序一一对应。
ORACLE的调度程序会进程到自己的响应队列中去看,有没有从共享服务器进程返回的应答,有就取出来,返回用户进程 。
整个过程中有个看不见的幽灵,叫虚拟电路circuit。
共享服务器模式下,每个用户进程和虚拟电路(本质是内存中的一小块空间)一一对应。虚拟电路的数据和会话的数目相等。
一但用户进程起来和调度程序建立连接,那么之后的请求都是这个调度程序进行处理,而不会换成别的调度程序。不过,共享服务进程处理请求队列中的请求,是随机的。
每个调度程序最多可以为1024个用户服务,一般一个调度程序为200个用户服务。
 
P132
共享服务器模式下,共享池的大小要扩大些
 
P133
配置共享服务器要用到的参数。
DISPATCHERS,表示在例程启动时,要启动多少个调度程序。
 
SHARED_SERVERS。表示在例程启动时,启动多少个共享服务进程。缺省为0,表示只能执行专用服务器模式。
 
MAX_DISPATCHERS,系统最大启动的调度程序数。和OS有关的参数
 
MAX_SHARED_SERVERS,系统最大启动的共享服务进程数
 
CIRCUITS,虚拟电路。
 
SHARED_SERVER_SESSIONS,单指共享的会话数,这个值等于SESSIONS减5,这5个留给专用服务器。用于执行startup和shutdown等命令。
 
P134
通过不同的协议连接,每个协议必须都创建DISPATCHER
 
P136
设置这个参数,可以动态的增加调度程序
 
P138
系统启动的时候,创建的服务进程数目。
 
P141
CIRCUITS的大小,影响到SGA的大小
 
P142
把SESSIONS减5,留给专用服务器
 
P143
LARGE_POOL_SIZE
SGA空间要扩大
缺省情况下,等于0,相关信息都放到SHARED_POOL里面。设置了LARGE_POOL_SIZE,相关信息就放在LARGE_POOL中。
 
P145
listener要侦听调度程序,也要到listener中去注册。这个是自动注册(DB startup后的60秒内进行注册)。可用lsnrctl services查看是否注册成功。
 
P147
共享服务器模式下,有一个请求队列和多个响应队列。
查看队列情况的动态视图
 
在OLAP里面,用户数多,操作时间比较短的情况下,用共享服务器模式比较多。
在DSS数据仓库里面,用专用服务器模式比较多
 
实验二:
实验目的:配置共享服务器模式
ORAcle V9.2来进行的实验。
 
初始化参数文件initDB91.ora中
没有下面这些参数,数据库起来后,只能使用专用服务器模式
shared_serviers
max_shared_servers
dispatchers
dispatchers
dispatchers
max_dispathers
 
设置三个dispather,是因为它们各对应不同的协议。
 
1.         sqlplus /nolog
 
2.         SQL> connect sys/ora123@DB91D as sysdba
 
3.         SQL> startup
 
4.         SQL> host
 
5.         lsnrctl
 
6.         LSNRCTL> service
       数据库启动了,这个时候就能看到DISPATCHERS都启动了。说明DISPATCHERS是自动注册的。
       检查数据库中的DISPATCHER是否启动。
       并且能看到每个DISPATCHER当前各建立了多少连接。
 
7.         LSNRCTL> exit
 
8.         exit
 
9.         SQL> show parameter dispatcher
       查看在参数中设置的dispatcher
 
10.     SQL> select * from v$queue;
00是请求队列,后面三个是响应队列。
TATALQ表示曾经处理过的请求数。
 
11.     SQL> select * from v$circuit;
信息比较多
 
12.     SQL> show parameter circuit
circuits的值是38
 
13.     SQL> show parameter sessions
sessions的值是38
shared_server_sessions的值是33
 
14.     SQL> get perf601
      
       看服务进程的忙碌程度,使用/进行执行
       具体所执行的SQL语句,在老师提供的perf601.sql文件中。
 
15.     SQL> alter system set shared_servers=4;
强行设置共享服务进程数为4
 
16.     SQL> desc v$shared_server
 
17.     SQL> select name,status from v$shared_server;
列出4个共享服务进程
 
18.     SQL> alter system set shared_servers=1;
 
19.     SQL> desc v$dispatcher
 
20.     SQL> column network format a15
 
21.     SQL> column status format a5
 
22.     SQL> select name,network,status from v$dispatcher;
 
network/admin/TNSNAMES文件中
server=shared 共享服务器模式
server=dedicated 专用服务器模式
 
sysdba进去用DB91D
SQL> connect sys/ora123@DB91D as sysdba
保证是以专用服务器模式进去,这样就能shutdown了
 
 
老师提供的db10doc目录下重要文件有:
initAUXDB1.ora
TSPITR.txt
standby.txt              华腾给轨道交通系统做的容灾备份数据库。
 
保存SQL语句的方法
SQL>save perfcache.sql
保存在当前目录下
 
调出已保存的SQL语句
SQL> get perf602
SQL> /
/是执行
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值