DCA培训心得笔记(二)
DCA培训心得笔记
- DM8产品使用
- 删除归档日志文件
- ODBC配置
- 故障模拟:表空间数据文件丢失
- 故障模拟:SYSTEM表空间数据文件丢失
DM8产品使用
删除归档日志文件
#开启归档
alter database mount;
alter database ARCHIVELOG;
alter database add ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,space_limit=10240';
alter database open;
归档开启后会生成一个归档日志文件,该归档文件运行在active状态下,可以用如下语句查询:
SQL> select * from SYS."V$ARCH_FILE";
参数ARCH_LSN可以理解为归档文件的头,CLSN理解为归档文件的尾。一头一尾记录了归档文件的记录的片段。
使用: SF_ARCHIVELOG_DELETE_BEFORE_LSN参数可以删除归档日志文件。
当归档文件处于active状态下,该参数无法删除正在运行的归档文件,所以需要先将归档文件变为inactive状态:将数据库转换为mount状态再转换为开启状态,此时之前的归档文件则会变成inactive状态,同时由于开启了归档,会自动生成一个新的active状态的归档文件。
此时可以删除inactive的归档文件。
可以看到第一个归档文件的ARCH_LSN为82820,CLSN为84324。
当我这样删除时:
select sf_archivelog_delete_before_lsn(82820);
参数返回值为0,代表没有删除任何归档文件,这是因为该参数的作用是删除该lsn值之前的归档文件,所以其实上面的语句删除的是82820之前的归档文件,所以删不掉这里的第一条归档。那么将语句改为:
select sf_archivelog_delete_before_lsn(84324);
结果仍然返回1,我理解为要删除一个归档文件,不能删除其片段,只能整个删除,这一行语句实际操作的是删除84324之前的归档文件也就是把LSN值为1至84323之间的归档文件删除,但是我们的第一个归档文件的尾是84324,所以该语句没有完全删除我们的第一条归档文件,也就默认不删除。
此时将语句改成:
select sf_archivelog_delete_before_lsn(84325);
成功删除了第一条inactive的归档文件。
再尝试:看看能否删除active的归档文件
select sf_archivelog_delete_before_lsn(100000);
证实无法删除正在运行的归档文件。
此时关闭归档:
#关闭归档
alter database mount;
alter database NOARCHIVELOG;
alter database delete ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,space_limit=10240';
alter database open;
可以发现查不到任何归档文件记录:
重新开启归档:
由于之前的归档文件因为数据库转换过mount状态而变成inactive,同时因为开启了归档,生成了一个新的归档文件,同时因为关闭过归档,会发现两个归档文件的LSN值不是连续的,而之前没有关闭归档时,inactive和active的归档文件之间得LSN值都是连续的。如果LSN值不连续,当进行归档文件备份的时候会报错:归档文件不连续,这个时候就需要删除不需要的归档文件,保证归档文件的连续性。
backup ARCHIVE LOG ALL to ARCHFULLBAK backupset '/dm8/backup/ARCHFULLBAK';
ODBC配置
将odbc安装包放在opt目录下解压:
tar -xzvf unixODBC-2.3.0.tar.gz
#进入unixODBC-2.3.0目录下源码安装
./configure
make
make install
#安装好后配置驱动信息和数据源信息
#配置信息文件默认在usr/local/etc下
cat odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
cat odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
#测试数据源
odbcinst -j
#启动
isql dm8 -v
#退出
quit 或ctrl+c
故障模拟:表空间数据文件丢失
#创建表空间
create tablespace tbs DATAFILE 'TBS01.DBF' SIZE 32;
#备份表空间
backup tablespace tbs to TBSFULLBAK01 backupset '/dm8/backup/TBSFULLBAK01';
#删除表空间数据文件模拟故障
rm TBS01.DBF
#关闭数据库
./DmServiceDMSERVER stop
#表空间还原 dmrman
restore database '/dm8/data/DAMENG/dm.ini' tablespace tbs from backupset '/dm8/backup/TBSFULLBAK01';
#表空间恢复 dmrman
recover database '/dm8/data/DAMENG/dm.ini' tablespace tbs;
故障模拟:SYSTEM表空间数据文件丢失
#数据库备份
backup DATABASE;
backup DATABASE full to FULLBAK01 BACKUPSET '/dm8/backup/FULLBAK01';
backup database INCREMENT to INCRBAK01 BACKUPSET '/dm8/backup/INCRBAK01';
backup database INCREMENT to INCRBAK02 BACKUPSET '/dm8/backup/INCRBAK02';
backup database INCREMENT CUMULATIVE to INCRBAK03 BACKUPSET '/dm8/backup/INCRBAK03';
backup database INCREMENT WITH BACKUPDIR '/dm8/backup/full' to INCRBAK04 BACKUPSET '/dm8/backup/INCRBAK04';
#删除数据文件
rm SYSTEM.DBF
#关闭数据库
./DmServiceDMSERVER stop
#还原
recover database '/dm8restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/FULLBAK01';
#恢复
recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';