目录
一、归档文件配置... 3
二、sql⽇志的开启和关闭以及基本的操作... 3
三、执行计划... 5
四、工具和命令行数据库物理、逻辑备份,还原... 6
1、工具物理备份... 6
2、命令行联机备份... 8
3、命令行脱机备份... 8
4、工具物理还原... 8
5、命令行DMRMAN脱机恢复... 11
五、逻辑备份和逻辑还原... 12
1、客户端逻辑全量备份... 12
2、客户端逻辑全量恢复... 13
3、验证... 13
4、客户端逻辑指定用户恢复... 14
5、测试... 14
6、级联表删除及导入:... 15
7、表空间转换... 16
8、非默认表空间表导入到默认表空间问题处理... 20
六、输出文件spool 21
一、归档文件配置
ARCH_FILE_SIZE:单个归档文件大小,单位 MB,取值范围 64~2048,缺省为 1024MB,即 1G
ARCH_FLUSH_BUF_SIZE:归档合并刷盘缓存大小,单位 MB,取值范围 0~128,缺省为 0,表示不使用归档合并刷盘
ARCH_HANG_FLAG:本地归档写入失败时系统是否挂起。
归档开启
alter database mount;
alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
alter database archivelog;
alter database open;
select arch_mode from v$database;
二、sql⽇志的开启和关闭以及基本的操作
开启dm.ini中参数SVR_LOG=1 参数是动态参数,可通过以下语句修改,直接生效
SP_SET_PARA_VALUE(1,'SVR_LOG',1); --开启日志记录
SP_SET_PARA_VALUE(1,'SVR_LOG',0); --关闭日志记录
或者
配置sqllog.ini文件
sqllog.ini文件在实例数据文件目录,直接编辑,编辑完可通过以下存储过程直接让配置生效,无需重启服务
SP_REFRESH_SVR_LOG_CONFIG();
示例:
dm.ini中指定模式[SLOG_ALL],而其中SQL_TRACE_MASK模式1全部记录。
执行SP_SET_PARA_VALUE(1,'SVR_LOG',1);
执行SP_SET_PARA_VALUE(1,'SVR_LOG',1); 系统过程后,dm.ini配置参数SVR_LOG自动改为1开启了
关闭sql日志,无sql输出了。
三、执行计划
执行计划和统计信息跟踪 的 配置 开关
SET AUTOTRACE <OFF(缺省值) | NL | INDEX | ON | TRACE | TRACEONLY>
SET AUTOTRACE TRACE --执行语句,打印执行计划,输出结果集
SET AUTOTRACE TRACEONLY --执行语句,打印执行计划,不输出结果集
SET AUTOTRACE OFF --关闭执行计划和统计信息的跟踪
或者直接
explain + sql
explain select * from dept;
四、工具和命令行数据库物理、逻辑备份,还原
1、工具物理备份
远程联机备份--远程图形化界面
windows执行dmmanager.exe连接服务
备份成功
2、命令行联机备份
SQL>backup database full backupset '/dm/ljbak/dave_full_01';
3、命令行脱机备份
shutdown immediate;
bin/目录下执行 ./dmrman
RMAN> BACKUP DATABASE '/dm8/data/data/DAMENG/dm.ini' FULL BACKUPSET '/dm8/tjbak/db_full_bak_01';
4、工具物理还原
root授权:chmod -R 777 workspace/
export DISPLAY=192.168.16.10:0.0
console
联机备份:
删除数据,停库
备份恢复:
恢复成功
5、命令行DMRMAN脱机恢复
shutdown immediate;
./dmrman
检查备份
RMAN> CHECK BACKUPSET '/dm/ljbak/dave_full_03';
RMAN> RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/ljbak/dave_full_03';
RMAN> RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/ljbak/dave_full_03';
RMAN> RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
五、逻辑备份和逻辑还原
都是在联机方式下完成
数据库级、用户级、模式级和表级。
数据库级(FULL): 导出或导入整个数据库中的所有对象。 FULL=Y
用户级(OWNER): 导出或导入一个或多个用户所拥有的所有对象。OWNER=<用户名>{,<用户名>}
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。 SCHEMAS=<模式名>{,<模式名>}
表级(TABLES): 导出或导入一个或多个指定的表或表分区。 TABLES=<表名>{,<表名>}
dexp导出的文件必须存放在客户端,dexpdp导出的文件必须存放在服务器端。
在使用 dexpdp 和 dimpdp 时,DIRECTORY 参数支持使用在服务器端通过 CREATE DIRECTORY 定义的目录名。
CREATE OR REPLACE DIRECTORY "GYFDIR" AS 'dm/data/dexp/path';
LSN:可以通过查询动态视图 V$RLOG 或 V$LSN_TIME 来确定。
INDEXFIRST 设置导入时是否先建索引。数据量大时,选择INDEXFIRST=Y,先创建索引再导入数据,这样就避免创建索引之前遍历大量数据而耗费时间。
REMAP_SCHEMA:将源模式中的数据导入到目标模式中。<SOURCE_SCHEMA>:<TARGET_SCHEMA>
REMAP_TABLE: REMAP_TABLE=T1:T2
REMAP_TABLESPACE REMAP_TABLESPACE=MAIN:TS
SCHEMAS=SYSDBA,OTHER,PERSON --可以一次导入多个模式
/user/data为数字证书路径(没有这里不填)
./dexp USERID=SYSDBA/SYSDBA@192.168.16.200:5235#/user/data FILE=db_str.dmp DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y
1、客户端逻辑全量备份
./dexp USERID=SYSDBA/SYSDBA@192.168.16.200:5235 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log FULL=Y
删库
2、客户端逻辑全量恢复
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log FULL=Y
3、验证
数据恢复
4、客户端逻辑指定用户恢复
drop user hr cascade;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr
create user hr identified by hr12345678;
创建用户后再次导入成功。(使用全量逻辑备份恢复指定用户数据)
5、测试
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr table_exists_action=append --(追加慎用!!会产生很多重复数据!!单独指定一个空表是可以的。)
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr table_exists_action=replace --(替换慎用!!可能会替换掉其他表中生产有效数据!!单独指定一个需恢复的表还可以。)
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log tables=hr.deptt table_exists_action=replace
6、级联表删除及导入:
./dexp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_t.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log tables=hr.deptt,hr.employees
select TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME,R_CONSTRAINT_NAME from dba_constraints where OWNER='HR';
alter table hr.DEPARTMENTS disable constraint "DEPT_MGR_FK";
alter table hr.JOB_HISTORY disable constraint "JHIST_EMP_FK";
truncate table hr.employees;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_t.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log tables=hr.deptt,hr.employees table_exists_action=replace
数据导入成功。
alter table hr.DEPARTMENTS enable constraint "DEPT_MGR_FK";
alter table hr.JOB_HISTORY enable constraint "JHIST_EMP_FK";
7、表空间转换
SELECT DISTINCT object_name FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'SCH';
select OWNER,TABLE_NAME,TABLESPACE_NAME from dba_tables where owner='HR';
SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID= df.GROUP_ID;
select username,user_id,default_tablespace,profile from dba_users;
drop user hr cascade;
create user hr identified by hr12345678;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr REMAP_TABLESPACE=MAIN:TS_HR
这种方法不行
drop user hr cascade;
create user hr identified by hr12345678 default tablespace TS_HR;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr
创建时默认表空间,导入时不需要转换表空间即可。
若是默认表空间MAIN,导入时,哪怕转换表空间也不行。
一个用户一个默认表空间,但是建表时可以指定其他表空间。所以一个用户可以使用多个表空间。
查询用户所有表所在的表空间
导出hr用户
./dexp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_u.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr
drop user hr cascade;
create user hr identified by hr12345678 default tablespace TS_HR;
导入用户hr
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_u.dmp DIRECTORY=/dm/dexp/data LOG=db_str.log owner=hr
导入成功。
8、非默认表空间表导入到默认表空间问题处理
drop table hr.DEPT00;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_u.dmp DIRECTORY=/dm/dexp/data tables=hr.dept00 REMAP_TABLESPACE=MAIN:TS_HRS
select username,user_id,default_tablespace,profile from dba_users;
映射不过去。这个REMAP_TABLESPACE参数只是针对默认表空间MAIN 映射为目标默认表空间TS_HR时才有用,但是这个参数不写,也能直接导入到hr用户的默认表空间。就说明该参数在用户导入时,没用。
这种情况只能目标库创建表,再导入源库数据
drop table hr.DEPT00;
create table hr.dept00(id int) tablespace TS_HR2;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_u.dmp DIRECTORY=/dm/dexp/data tables=hr.dept00 table_exists_action=replace
select username,user_id,default_tablespace,profile from dba_users;
./dimp USERID=SYSDBA/SYSDBA@192.168.16.200:5236 FILE=db_str_u.dmp DIRECTORY=/dm/dexp/data tables=hr.dept00 table_exists_action=append
设置追加才可以,若是替换,还会迁移到默认表空间