目录
- 47、查看执行计划
- 46、查看编译无效的对象
- 45、vi快速定位到某一个行:行号+shift+G
- 44、数据库监听状态为blocked,表示数据库没有open
- 43、expdp导表
- (2)只导出表结构
- 42、查看DG的归档日志是否同步
- 41、grid:has(单机叫法),crs(集群叫法)
- 40、DG过程
- 39、12C关于DG的新特性
- 38、RMAN中的Auto backup
- 37、MRP进程
- 36、查看用户拥有哪些角色
- 35、expdp导出表(按条件)
- 35、expdp导出排除表
- 34、关于sql trace的查询语句
- 33、获取session的sid和serial#
- 32、Oracle删除数据文件
- 31、Oracle数据文件改名:
- 30、关于sql_trace
- 1、vi .bash_profile
- 2、LWGR触发条件
- 3、DBWn触发条件
- 4、ARCn触发条件
- 5、rman中的catalog和nocatalog的区别
- 6、resetlogs和noresetlogs的区别
- 7、resetlogs后注意事项
- 8、show all改变数据备份位置
- 9、查看控制文件scn和数据头scn
- 10、理解recover database using backup controlfile
- 11、RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time问题解决
- 11、4个SCN
- 18、rman restore报错:ORA-19573
- 19、通过RMAN命令清理归档日志失败报错RMAN-08137解决方案
47、查看执行计划
SQL> explain plan for select * from sfc_mo A inner join so_register_product B on A.Requir_Dtl_Id=B.id ; SQL> select * from table(dbms_xplan.display);
46、查看编译无效的对象
SQL>select owner,object_name,object_type,status from dba_objects where status !='VALID' and owner not in ('SYS','SYSTEM') 直接生成可以执行的语句 SQL>select 'alter'||' '||object_type ||' '|| owner ||'.'|| object_name || ' '||'compile;' from dba_objects where status !='VALID' and owner not in ('SYS','SYSTEM') order by object_type;
45、vi快速定位到某一个行:行号+shift+G
44、数据库监听状态为blocked,表示数据库没有open
43、expdp导表
(1)expdp 排除大量的表(排除OLD开头的,使用table:like参数,还有转义字符)
expdp mes_prd/mes800 dumpfile=MESPRD_202203141000.dmp logfile=MESPRD_2022031410000.dmp.log DIRECTORY=backup_mes2 exclude=table:\"like\'OLD%\'\" compression=all;
(2)只导出表结构
expdp mes_prd/mes800 dumpfile=MESPRD_20220416_only.dmp logfile=MESPRD_20220416_metadata_only.dmp.log DIRECTORY=backup_mes2 include=table:\"like\'OLD%\'\" CONTENT=METADATA_ONLY compression=all;
42、查看DG的归档日志是否同步
SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;
41、grid:has(单机叫法),crs(集群叫法)
40、DG过程
什么最重要?alert.log最重要,所有的传输,同步,应用,以及服务的启停过程都要看日志,才能及时快速的排错。
39、12C关于DG的新特性
(1)在线进行duplicate,rman的用户不能使用sys了,必须要使用sysbackup或sysdg用户才可以。
38、RMAN中的Auto backup
(1)如果设置了auto backup on,
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on; RMAN> backup database format '/oracle/LLL_%s_%p_%u.bak';
那么rman 在备份时,会自动备份到db_recovery_file_dest目录中。
(2)如果设置了auto backup off(默认)
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP off; RMAN> backup database format '/oracle/LLL_%s_%p_%u.bak';
那么rman 在备份时,会自动备份到和数据文件一个备份集中的其他备份片中。
对于DG中,建议使用auto backup off模式,否则将备份拷贝到备机时,备机存放备份文件路径要和备份文件原路径一致。又因autobackup的文件在db_recovery_file_dest,备机如果没有这个目录,且控制文件备份集不在,那么备库rman还原数据时会失败。
37、MRP进程
DG或ADG中,执行下述语句,MRP进程开始运行
SQL>alter database recover managed standby database disconnect from session;
36、查看用户拥有哪些角色
select * from dba_role_privs where grantee='SYS' ;
35、expdp导出表(按条件)
(1)一个表,按条件
expdp system/oracle directory=expdp dumpfile=ncc20211221_1_tables.dmp logfile=ncc20211221_1_tables.log tables=ncc.ITF_TRANSLOGVO query=\'ITF_TRANSLOGVO:"where rownum<2"\'
(2)多个表,按条件
expdp system/oracle directory=expdp dumpfile=ncc20211221_1_tables.dmp logfile=ncc20211221_1_tables.log tables=ncc.SMG_PAY1_LOG,ncc.ITF_TRANSLOGVO query=\'SMG_PAY1_LOG:"where rownum<2"\',\'ITF_TRANSLOGVO:"where rownum<2"\'
35、expdp导出排除表
排除ncc用户下的表ITF_TRANSLOGVO和表SMG_PAY1_LOG
[oracle@nccpdb:/backup/expdp]$expdp system/oracle directory=expdp dumpfile=ncc20211221_1.dmp logfile=ncc20211221_1.log schemas=ncc exclude=TABLE:\"IN \(\'ITF_TRANSLOGVO\',\'SMG_PAY1_LOG\'\)\"
34、关于sql trace的查询语句
SQL> select * from dba_enabled_trace; SQL> select * from dba_enabled_aggregations; SQL> select * from v$serv_mod_act_stats;
33、获取session的sid和serial#
SQL>select * from v$mystat where rownum=1; SID STATISTIC# VALUE ---------- ---------- ---------- 222 0 0 SQL>select sid,serial# from v$session where sid=222;
32、Oracle删除数据文件
(1)通过删除表空间,将数据文件删除
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
(2)删除一个空数据文件
--先确认是否为空数据文件(当前数据文件是否有段名或表名)
select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents where file_id=9
--如果有,则把表移动到其他表空间
SQL>alter table test move tablespace PERFSTAT;
--如果没有或已经移到其他表空间,可以进行数据文件删除
alter tablespace users drop datafile 2 '/u01/app/oracle/oradata/orcl/users02.dbf';
31、Oracle数据文件改名:
(1)mounted状态:
SQL>select open_mode from v$database; OPEN_MODE ------------------------------ MOUNTED SQL>host cp /u01/app/oracle/oradata/userdata/users02.dbf /u01/app/oracle/oradata/userdata/users01.dbf SQL>alter database rename file '/u01/app/oracle/oradata/userdata/users02.dbf' to '/u01/app/oracle/oradata/userdata/users01.dbf';
(2)open状态:
SQL>alter tablespace users offline; SQL>!cp /u01/app/oracle/oradata/userdata/users01.dbf /u01/app/oracle/oradata/userdata/users02.dbf SQL>alter database rename file '/u01/app/oracle/oradata/userdata/users01.dbf' to '/u01/app/oracle/oradata/userdata/users02.dbf'; SQL>alter tablespace users online;
30、关于sql_trace
关于数据库的跟踪日志,在$ORACLE_BASE/diag/rdbms/<db_name>/<oracle_sid>/trace中。
其中日志模式为<oracle_sid>_进程名称_系统pid.trc或trm
参数sql_trace为true后,很多日志就都生成了。
1、vi .bash_profile
alias log='/usr/bin/tail -100f /oracle/app/oracle/diag/rdbms/mesorcl/mesorcl/trace/alert_mesorcl.log'
2、LWGR触发条件
--用户提交(commit) --有 1/3 重做日志缓冲区未被写入磁盘(磁盘是指redo01.log等) --有大于 1m 的重做日志缓冲区未被写入磁盘 --3 秒超时 --dbwr 需要写入的数据的 scn 大于 lgwr 记录的 scn, dbwr 触发 lgwr 写入。
3、DBWn触发条件
(1) 通过正常事务处理或者立即选项关闭例程时
shutdown immediate shutdown normal
(2) 当通过设置初始化参数:
log_checkpoint_interval,
log_checkpoint_timeout ,
fast_start_io_target 强制时;
(3) 当数据库管理员手动请求时:
alter system checkpoint; --触发完全点检查
alter tablespace ... offline;
(4) 每次日志切换时;
alter system switch logfile ---触发完全点检查
注意:
- alter system switch logfile 也将触发完全检查点的发生。
- alter database datafile ... offline 不会触发检查点进程。
4、ARCn触发条件
①当LGWR将一个在线重做日志文件填满时,就将其复制到另一个位置。
②alter system switch logfile
5、rman中的catalog和nocatalog的区别
(1)nocatalog下
rman进行数据备份、archivelog备份,参数备份等,都会将备份的信息写入到controlfile中,所以在备份完成上述后,也要对控制文件进行备份。以防所有的数据都丢失后,需要用控制文件引导上述数据文件结构信息的重建,恢复。 如果上述备份,不备份控制文件,等所有数据丢失,则无法恢复任何数据。 如果上述备份,不备份控制文件,等控制文件中的这些备份信息被覆盖后,则无法恢复任何数据。 所以需要最后备份控制文件。
(2)catalog下
catalog成为恢复目录,可以单独部署一台oracle服务器,创建针对于catalog的表空间,用户。可以将网内所有的oracle注册到catalog数据库中。 如此每次A数据库rman备份时,通过rman target / catalog rman/oracle@catalog_tns 连接到catalog中, 备份时,会把所有的cataolog备份的信息结构(如A数据库的数据文件备份在什么位置等,都会被catalog记录)。 等还原恢复时,A数据库管理员,通过登录rman target / catalog rman/oracle@catalog_tns 进行restore/recover database就可以直接定位恢复了。
6、resetlogs和noresetlogs的区别
(1)首先,resetlogs是不完全恢复,noresetlogs可称为完全恢复 (2)再次,在控制文件丢失了或损坏了,则使用旧的备份控制文件进行数据库恢复,在alter database open阶段需要resetlogs或noresetlogs (3)其次,如果只是控制文件丢失了,不管是resetlogs还是noresetlogs,都不会丢失数据 (4)最后,resetlogs是通过还原(restore),恢复(recover)流程时使用。noresetlogs是通过重建控制文件时使用
可参照:
Oracle文档中提到,一旦用备份的控制文件进行数据库恢复,就需要使用resetlogs的方法打开数据库,但是resetlogs通常意味着不完全恢复,而且更重要的是一旦用resetlogs方法打开数据库,日志的序号用重新从1开始。其实如果只是控制文件损坏,日志文件都完整的话,数据库是可以完全恢复的,而且不必非得用resetlogs打开。
https://blog.csdn.net/u011616400/article/details/39700655 https://www.cnblogs.com/storymedia/p/4538894.html
7、resetlogs后注意事项
一旦进行了resetlogs,一定要记得做一次rman备份,因为resetlogs后,所有的序列号全部从1开始计数。使用catalog方式无法正常恢复。
(1)如果使用catalog方式的时候,且还用老的rman备份文件(数据,控制,参数)等,会出现incarnation(对应物)如报错:
因为在catalog记录的信息,是上一次resetlogs之前的序列。
ORA-00283: recovery session canceled due to errors RMAN-11003: failure during parse/execution of SQL statement: alter database recover if needed start until cancel using backup controlfile ORA-00283: recovery session canceled due to errors ORA-19909: datafile 1 belongs to an orphan incarnation ORA-01110: data file 1: '/data/u01/app/oracle/oradata/mesorcl/system01.dbf'
(2)如果用nocatalog,再用老的rman文件,先把控制文件从rman恢复出来,就可以正常恢复数据文件。
8、show all改变数据备份位置
RMAN> configure channel device type disk format ' /data/backup/full/%U_%u_%f_%c';
9、查看控制文件scn和数据头scn
SQL> select CHECKPOINT_CHANGE# from v$datafile;------控制文件 SQL> select CHECKPOINT_CHANGE# from v$datafile_header;---数据头文件
10、理解recover database using backup controlfile
见:http://blog.itpub.net/31397003/viewspace-2666619/
要理解recover database using backup controlfile,先理解 recover database.
(1)不加using backup controlfile的情况。
在普通的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所纪录的SCN为准,利用archive log和 redo log的redo entry, 把相关datafile 的 block恢复到“当前controlfile所纪录的SCN”。
(2)需要用using backup controlfile
而某些情况下,Oracle需要把数据恢复到比当前controlfile所纪录的SCN还要靠后的位置(比如说,control file是backup controlfile , 或者 controlfile是根据trace create的。),这时候,就需要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。
这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel) ...
11、RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time问题解决
分析:出现这个问题的原因似乎因为对应物(incarnation)的缘故;数据库recover后进行了resetlogs打开方式,其incarnation的值增加了一个,由7变为8,
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
2 2 MESORCL 3009899787 PARENT 995548 24-JUN-21
3 3 MESORCL 3009899787 PARENT 1010188 24-JUN-21
4 4 MESORCL 3009899787 PARENT 1077744 24-JUN-21
5 5 MESORCL 3009899787 PARENT 1136414 25-JUN-21
6 6 MESORCL 3009899787 PARENT 1157025 25-JUN-21
1 1 MESORCL 3009899787 PARENT 1291463 25-JUN-21
7 7 MESORCL 3009899787 PARENT 1398272 28-JUN-21
8 8 MESORCL 3009899787 CURRENT 1400805 28-JUN-21
以resetlogs方式打开数据库,此时数据库就会以incarnation DB Key=7此时间点状态打开一个新的incarnation DB Key=8数据库(当数据库恢复成功,只要没有执行alter database open resetlogs,那么数据库incarnation就会一直处于DB Key=7的状态,此时由于归档日志和重做日志都是完整的,因此可以在此状态下恢复到自RMAN全备后的任一时间点)。
8这个状态数据库的归档日志和重做日志都是空的,且只能从他打开的该时间点往后记录数据库的所有操作,而不能从该时间点回退数据库操做,因为在8状态下,没有归档日志和重做日志,因此当recover之后,在此基础上进行的后续操作,由于数据库处于新的状态8,没有归档日志和重组日志,所以无法在此基础上恢复EMP表。
解决办法就是重置数据库到状态7,然后直接恢复数据库到指定的那个时间点即可。
RMAN> RESET DATABASE TO INCARNATION 7;
11、4个SCN
首先这里我们先介绍四个SCN概念。
1、系统检查点scn (System Checkpoint SCN)
当一个checkpoint检查点动作完成后,Oracle就把系统检查点的SCN存储到控制文件中。
select checkpoint_change# from v$database;
2,数据文件检查点scn (Datafile Checkpoint SCN)
当一个checkpoint动作完成后,Oracle就把每个数据文件的Datafile Checkpoint SCN单独存放在控制文件中。
select name,checkpoint_change# from v$datafile;
3,启动scn (Start SCN)
Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,这个SCN用于用于在数据库实例启动
时,检查是否需要执行数据库恢复media recovery。
select name,checkpoint_change# from v$datafile_header;
4、终止scn (Stop SCN)
每个数据文件的终止scn都存储在控制文件中。这个SCN号用于检查数据库启动过程是否需要做instance recovery。
select name,last_change# from v$datafile;
5.media recovery和instance recovery
1).media recovery是需要利用以前的备份来进行恢复的,而INSTANCE RECOVERY是不需要的。
2).media recovery通常发生在数据库的数据文件之类发生损坏,需要利用以前的备份来进行的恢复,需要人工处理。
3).instance recovery则是发生在实例不正常关闭情况下的恢复,是INSTANCE自己来的,不需要人工干预的。
6、在数据库运行期间的scn值
1).在数据库打开并运行之后,控制文件中的系统检查点、控制文件中的数据文件检查点scn和每个数据文件头中的启动scn都
是相同的。控制文件中的每个数据文件的终止scn都为null.
2).在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn都会设置成数据文件头中的那个
启动scn的值。
3).在数据库重新启动的时候,Oracle将文件头中的那个启动scn与数据库文件检查点scn进行比较,如果这两个值相互匹配,
oracle接下来还要比较数据文件头中的启动scn和控制文件中数据文件的终止scn。如果这两个值也一致,就意味着所有数据
块多已经提交,所有对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,
此时数据库就可以打开了。当所有的数据库都打开之后,存储在控制文件中的数据文件终止scn的值再次被更改为null,这表
示数据文件已经打开并能够正常使用了。
7.SCN与数据库启动
在数据库启动过程中,当System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN都相同时,数据库可以正常启
动,不需要做media recovery。三者当中有一个不同时,则需要做media recovery.如果在启动的过程中,End SCN为NULL
,则需要做instance recovery。Oracle在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance
reco very。
8.SCN与数据库关闭
如果数据库的正常关闭的话,将会触发一个checkpoint,同时将数据文件的END SCN设置为相应数据文件的Start SCN。当
数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE会将END SCN设置为
NULL.如果数据库异常关闭的话,则END SCN将为NULL。
9.系统正常关闭:
system scn=datafile scn=start scn=stop scn
1)system scn=datafile scn=start scn,不需要介质恢复
2)stopscn not null,不需要实例恢复
10.系统异常关闭:
system scn=datafile scn=start scn,stop scn null
1)system scn=datafile scn=start scn,不需要介质恢复
2)stopscn null,需要实例恢复
11.旧数据文件
system scn=datafile scn>start scn,stop scn null/notnull
1)system scn=datafile scn>start scn,需要介质恢复成system scn=datafile scn=start scn
2)stopscn null,需要实例恢复,not null 不需要实例恢复
12.备份控制文件
system scn=datafile scn<=start scn(当数据文件为旧的相等),stop scn notnull/null
1)system scn=datafile scn<=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start
scn=current log scn(当前日志最大SCN)
2)为保证上一次恢复没有用到log日志不被使用,必须resetlogs
13.重建noresetlogs控制文件
控制文件中 datafile Checkpoint来自Online logs中的Current log头
current log scn=system scn=datafile scn>=start scn,stop scn not null/null
1)current log scn=system scn=datafile scn>=start scn,需要介质恢复成system scn=datafile scn=start scn=redolog
scn(当前日志最大SCN),stop scn not null
2)stopscn not null 不需要实例恢复
14.重建resetlogs控制文件
控制文件中datafile Checkpoint来自各数据文件头。
system scn>=datafile scn=start scn,stop scn not null/null
1)system scn>=datafile scn=start scn,需要使用using backup controlfile介质恢复成system scn=datafile scn=start
scn(当前日志最大SCN),stop scn not null
2)stop notnull,因为SCN已经为redolog scn,log已经不能使用,必须resetlogs
15.recover database using backup controlfile
如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点;
16.recover database until cancel
如果丢失current/active redo的时候,手动指定终点。
17.recover database using backup controlfile until cancel
如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;
18、rman恢复过程,打开过程如果无法出现如下错误:建议重建控制文件,再进行恢复(但恢复使用using backup controlfile
SQL> alter database open; alter database open * ERROR at line 1: ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00600: internal error code, arguments: [adbdrv_inconsist_dbkey], [], [], [], [], [], [], [], [], [], [], [] Process ID: 11793 Session ID: 96 Serial number: 3
(1)重建控制文件(SQL MOUNT>alter database backup controlfile to trace as '/data/cnt.cl')
(2)RMAN>restore database
(3)SQL>recover database using backup controlfile until cacel——cancel
(4)SQL>alter database open resetlogs;
18、rman restore报错:ORA-19573
RMAN-03002: failure of restore command at 07/28/2021 08:26:13 ORA-19870: error while restoring backup piece /data/backup/LLL_level0_mesorcl_131_1_1079079559 ORA-19573: cannot obtain exclusive enqueue for datafile 5
原因:数据库有数据文件online,需要在mount下恢复
19、通过RMAN命令清理归档日志失败报错RMAN-08137解决方案
1. 报错如下: RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process archived log file name=/archive_bams/1_71800_812561563.arc thread=1 sequence=71800
2. 触发bug:metalink ID 1079953.1
通常是在搭建dg的时候,主库和备库已经互相确认了主备关系,但是备库的归档日志缺失了一部分,导致备库上仅有的那部分归档日志无法成功应用日志。这时主库认为备库没有成功应用这些归档,而无法在主库中删除对应的归档日志。
3. 解决方案:清理主库归档时,增加force关键字
DELETE noprompt force ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';