执行计划 RAC 笔记
查看执行计划一:
explain plan for select * from dual;
select * from table(dbms_xplan.display);
查看执行计划二:
//收集运行时的统计信息,包括行数,一直读取次数,物理读次数,物理写次数以及运算在一行数据上耗费的运行时间,如果没有指定该参数,就不会有A-Rows,A-Time,Buffers这三列信息
select /*+ gather_plan_statistics */ count(*) from scott.emp;
//将sql_id和child_number设置成null,表示获取上一条执行语句的执行计划
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
查看执行计划三:
//执行一个简单查询
select count(*) from scott.emp where sal between 100 and 3000;
//收集运行时的统计信息
select /*+ gather_plan_statistics */ count(*) from scott.emp where sal between 100 and 3000;
//通过v$sql视图查询到sql语句的SQL_ID和CHILD_NUMBER(注意,必须要确保要查询的sql语句还在shared pool中)
select sql_id,child_number,sql_text from v$sql
where sql_text like '%select /*+ gather_plan_statistics */ count(*)%';
//查看该语句执行时的执行计划,将上一步查询出来的sql_id传递进去
select * from table(dbms_xplan.display_cursor('d86dz1fjtn7g7',0,'ALLSTATS LAST'));
查看执行计划四:
select * from table(dbms_xplan.display(format =>'all'));
找到SQL的执行计划:
select * from dba_objects where object_type='INDEX';
select tf.*
from dba_hist_sqltext ht, TABLE (DBMS_XPLAN.DISPLAY_AWR(ht.sql_id,null,null,'ALL')) tf
where ht.sql_text like '%dba_objects%';
单实例迁移到RAC环境:
1、备份单实例数据库和归档,控制文件,将RAC的DATABASE删除。
2、将备份文件拷贝到RAC环境
3、在RAC中建立一个简单的pfile
4、通过pfile把RAC数据库启动到nomount状态,恢复控制文件,将数据库启动到mount状态
restore controlfile form '/home/oracle/bakcup/control.bk';
5、如果在RMAN中没有看到备份文件就要在RMAN上注册备份文件,开始恢复备份restore database
6、在单实例数据库上备份新产生的数据,主要是归档,备份之前要断开业务,避免产生新的数据,备份完传送到RAC。
7、在RAC中注册传送过来的归档,进行恢复recover database
8、恢复完成后,重建两个实例的UNDO TABLESPACE,REDO LOGFILE,TEMP TABLESPACE,删除本地的日志组。
9、打开数据库alter system set cluster_database=false, alter database open resetlogs ;
10、最后将cluster_database 修改成true
11、根据pfile创建RAC的spfile
12、将数据库,实例都注册到CRS中。
13、配置第二个节点,在第二个节点添加实例。
14、配置instance_number参数 alter system set instance_number=2 scope=spfile sid='prod2';
run {
set newname for datafile '/u02/PROD1/system01.dbf' to '+data2/prod1/datafile/system01.dbf';
set newname for datafile '' to '';
restore database;
switch datafile all;
recover database;
}
使用rman进行恢复时,如果使用了set newname 修改恢复后文件的路径,那么恢复后控制文件里面的信息是没有修改该的,
如果要同步控制文件的信息那么就需要使用 switch datafile all,switch datafile all的作用,就是更新控制文件里的信息。
rman备份的信息是保存在控制文件里的,包括文件的路径信息。
重新编译失效对像可执行utlrp.sql文件:
@?/rdbms/admin/utlrp.sql
-编译无效对象脚本utlrp.sql
$ sqlplus '/as sysdba' @?/rdbms/admin/utlrp.sql
utlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.
oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象。
实例:添加一个新的数据库
srvctl add database -d mydb -o /ora/ora9
实例:向数据库添加实例
srvctl add instance -d mydb -i mydb01 -n gm01
srvctl add instance -d mydb -i mydb02 -n gm02
srvctl add instance -d mydb -i mydb03 -n gm03
显示数据库配置信息
srvctl config database -d mydb
列出数据库的所有环境变量
srvctl getenv database -d mydb
删除数据库
srvctl remove database -d mydb
删除数据库实例
srvctl remove instance -d mydb -i mydb01
srvctl config service -db orcl 展示服务信息。
srvctl config asm 展示asm实例的Oracle Restart配置信息。
srvctl config database -db orcl -all 展示数据库相关信息。
srvctl config listener 展示监听器相关信息。
srvctl config ons 展示Oracle通知服务信息
srvctl status listener
srvctl status ons
srvctl status service -db orcl
srvctl status database -db orcl -verbose
srvctl status diskgroup -diskgroup DATA -detail
srvctl status asm -detail
显示数据库配置信息:srvctl config database -d mydb
列出数据库的所有环境变量:srvctl getenv database -d mydb
删除数据库:srvctl remove database -d mydb
使用强制选项(-f),删除操作将不进行提示
srvctl remove database -d database_name [-f]
删除数据库实例
srvctl remove instance -d mydb -i mydb0
列出配置的所有数据库
srvctl config database
显示RAC数据库的配置
srvctl config database -d orcl
显示指定集群数据库的所有服务
srvctl config service -d orcl
srvctl remove database -d rac
srvctl remove instance -d rac -i rac1
取与显示环境变量
srvctl getenv database -d rac
crs_start -all --启动所有的crs服务
crs_stop -all --停止所有的crs服务
crs_stop ora.prod1.db 停止数据库
删除数据库
srvctl remove database -d prod1 -f
向OCR中添加一个数据库:
srvctl add database -d testdb -o $ORACLE_HOME
在节点一添加实例:
srvctl add instance -d testdb -i prod1 -n rac1
crs_start 资源的名字
另一个节点添加实例:
srvctl add instance -d testdb -i prod2 -n rac2
修改instance_number:
alter system set instance_number=1 scope=spfile sid=PROD1;
alter system set instance_number=2 scope=spfile sid=PROD2;