1.设置归档模式
DG环境的搭建必须要把数据库启动到归档模式,并且为了避免开发人员使用nologging语句,我们还要把数据库设置为force logging。
查看数据库是否运行在归档模式:
#su - oracle
$sqlplus / as sysdba
SQL>archive log list;
数据库运行在非归档模式,下面我们开始操作,把数据库修改为归档模式:首先关闭数据库
命令如下:
SQL>shutdown immediate;
启动数据库到mount状态下
命令如下:
SQL>startup mount;
查询结果必须是MOUNTED哦,如果输出的是其它方式,证明操作有误,请重新关闭数据库进行操作
SQL>select open_mode from v$database;
把数据库修改为归档模式并打开数据库:
命令如下:
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
数据库打开后,我们需要把数据库设为force logging
命令如下:
SQL>alter database force logging;
SQL>select name,log_mode,force_logging from v$database;
2.添加standby 日志
standby logfile的数量和大小均要与redo logfile相同
查询主库当前redo logfile的数量,命令如下:
SQL> select thread#,group#,members,bytes/1024/1024 from v$log;
我们主库有三组大小为50M的redo logfile,故我们也需要创建同样数量和大小的standby logfile:
SQL>alter database add standby logfile group 11('/data/oracle/app/oracle/oradata/orcl/redo01_stb.log') size 50M;
SQL>alter database add standby logfile group 12('/data/oracle/app/oracle/oradata/orcl/redo02_stb.log') size 50M;
SQL>alter database add standby logfile group 13('/data/oracle/app/oracle/oradata/orcl/redo03_stb.log') size 50M;
SQL>select group#,thread#,sequence#,archived,status from v$standby_log;
3.设置数据库口令文件的使用模式
执行以下命令查看remote_login_passwordfile的值是否EXCLUSIVE
SQL>show parameter remote_login_passwordfile
如果不是,执行以下命令进行设置,并且重启数据库,使其生效:
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
SQL>shutdown immediate;
SQL>startup;
4.参数设置
a)主库参数设置:
SQL>show parameter db_unique_name
SQL>alter system set log_archive_config='dg_config=(orcl,orcls)' scope=spfile;
设置归档日志的存放位置:
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/data/oracle/app/oracle/oradata/orcl/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=orcl';
alter system set log_archive_dest_2='SERVICE=orcls ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcls';
启用设置的日志路径:
SQL>alter system set log_archive_dest_state_1=enable scope=spfile;
SQL>alter system set log_archive_dest_state_2=enable scope=spfile;
设置归档日志进程的最大数量(视实际情况调整):
SQL>alter system set log_archive_max_processes=30 scope=both;
设置standby库从哪个数据库获取归档日志(只对standby库有效,在主库上设置是为了在故障切换后,主库可以成为备库使用):
alter system set fal_server=orcls scope=both;
设置文件管理模式,此项设置为自动,不然在主库创建数据文件后,备库不会自动创建:
SQL>alter system set standby_file_management=auto scope=spfile;
启用OMF功能:
SQL> alter system set db_create_file_dest='/data//oracle/app/oracle/oradata/orcl/archivelog' scope=spfile;
设置主备文件存放路径:
SQL>alter system set db_file_name_convert='/data/oracle/app/oracle/oradata/orcls','/data/oracle/app/oracle/oradata/orcl' scope=spfile;
SQL>alter system set log_file_name_convert='/data/oracle/app/oracle/oradata/orcls','/data/oracle/app/oracle/oradata/orcl' scope=spfile;
通过以下命令生成一个pfile文件给备库使用:
SQL>create pfile from spfile;
备库操作:
SQL>shutdown immediate;
SQL>startup nomount pfile='/data/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initorcls.ora' ;
SQL>create spfile from pfile;
SQL>shutdown immediate;
SQL>exit;
sqlplus / as sysdba
SQL>startup nomount
进行rman :
rman target sys/xxzgs123@orcl auxiliary sys/xxzgs123@orcls nocatalog
RMAN>duplicate target database for standby from active database;
复制完成后,打开数据库开启实时同步:
sqlplus / as sysdba
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
SQL>alter database recover managed standby database using current logfile disconnect from session;
5.查看数据库状态
1.登陆到主库和备库
sqlplus / as sysdba
SQL>conn sys/123456 as sysdba
2,查看状态:
SQL>select database_role from v$database;
SQL>select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;
3,查询所有表空间
select file_name,tablespace_name,bytes from dba_data_files;
主:
从:
4.查看表空间的名称及大小:
SELECT T.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZE
FROM DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
GROUP BY T.TABLESPACE_NAME;
5.查看表空间物理文件的名称及大小:
SELECT TABLESPACE_NAME,FILE_ID,FILE_NAME,ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACE
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME;
6.查看所有表空间对应的数据文件名:
SQL>SELECT DISTINCT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM DBA_DATA_FILES;
7.查看表空间的使用情况:
SELECT SUM(BYTES)/(1024*1024) AS FREE_SPACE,TABLESPACE_NAME
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
COLUMN TABLESPACE_NAME FORMAT A18;
COLUMN SUM_M FORMAT A12;
COLUMN USED_M FORMAT A12;
COLUMN FREE_M FORMAT A12;
COLUMN PTO_M FORMAT 9.99;
SELECT S.TABLESPACE_NAME,CEIL(SUM(S.BYTES/1024/1024))||'M' SUM_M,CEIL(SUM(S.USEDSPACE/1024/1024))||'M' USED_M,CEIL(SUM(S.FREESPACE/1024/1024))||'M' FREE_M, SUM(S.USEDSPACE)/SUM(S.BYTES) PTUSED FROM (SELECT B.FILE_ID,B.TABLESPACE_NAME,B.BYTES, (B.BYTES-SUM(NVL(A.BYTES,0))) USEDSPACE, SUM(NVL(A.BYTES,0)) FREESPACE,(SUM(NVL(A.BYTES,0))/(B.BYTES)) * 100 FREEPERCENTRATIO FROM SYS.DBA_FREE_SPACE A,SYS.DBA_DATA_FILES B WHERE A.FILE_ID(+)=B.FILE_ID GROUP BY B.FILE_ID,B.TABLESPACE_NAME,B.BYTES ORDER BY B.TABLESPACE_NAME) S GROUP BY S.TABLESPACE_NAME ORDER BY SUM(S.FREESPACE)/SUM(S.BYTES) DESC;
8.查看数据文件的hwm(可以resize的最小空间)和文件头大小:
SELECT V1.FILE_NAME,V1.FILE_ID,NUM1 TOTLE_SPACE,NUM3 FREE_SPACE,
NUM1-NUM3 "USED_SPACE(HWM)",NVL(NUM2,0) DATA_SPACE,NUM1-NUM3-NVL(NUM2,0) FILE_HEAD
FROM
(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,
(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,
(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3
WHERE V1.FILE_ID=V2.FILE_ID(+) AND V1.FILE_ID=V3.FILE_ID(+);
数据文件大小及头大小:
SELECT V1.FILE_NAME,V1.FILE_ID,
NUM1 TOTLE_SPACE,
NUM3 FREE_SPACE,
NUM1-NUM3 USED_SPACE,
NVL(NUM2,0) DATA_SPACE,
NUM1-NUM3-NVL(NUM2,0) FILE_HEAD
FROM
(SELECT FILE_NAME,FILE_ID,SUM(BYTES) NUM1 FROM DBA_DATA_FILES GROUP BY FILE_NAME,FILE_ID) V1,
(SELECT FILE_ID,SUM(BYTES) NUM2 FROM DBA_EXTENTS GROUP BY FILE_ID) V2,
(SELECT FILE_ID,SUM(BYTES) NUM3 FROM DBA_FREE_SPACE GROUP BY FILE_ID) V3
WHERE V1.FILE_ID=V2.FILE_ID(+)
AND V1.FILE_ID=V3.FILE_ID(+);
(运行以上查询,我们可以如下信息:
Totle_pace:该数据文件的总大小,字节为单位
Free_space:该数据文件的剩于大小,字节为单位
Used_space:该数据文件的已用空间,字节为单位
Data_space:该数据文件中段数据占用空间,也就是数据空间,字节为单位
File_Head:该数据文件头部占用空间,字节为单位)
6.一些常用的sql命令:
--查看临时表空间文件 select name from v$tempfile; --查看用户和表空间的关系 select USERNAME,TEMPORARY_TABLESPACE from DBA_USERS; --如果有用户的默认临时表空间是NOTIFYDB_TEMP的话,建议进行更改 alter user xxx temporary tablespace tempdefault; ---设置tempdefault为默认临时表空间 alter database default temporary tablespace tempdefault; --删除表空间NOTIFYDB_TEMP及其包含数据对象以及数据文件 drop tablespace NOTIFYDB_TEMP including contents and datafiles;
--查看表空间文件 select name from v$datafile; --停止表空间的在线使用 alter tablespace 表空间名称 offline; --删除表空间NOTIFYDB_TEMP及其包含数据对象以及数据文件 drop tablespace NOTIFYDB_TEMP including contents and datafiles;
--查看所有的用户 select * from all_users; --查看当前用户信息 select * from user_users; --查看当前用户的角色 select * from user_role_privs; --查看当前用户的权限 select * from user_sys_privs; --查看当前用户的表可操作权限 select * from user_tab_privs; --查看某一个表的约束,注意表名要 大写 select * from user_constraints where table_name='TBL_XXX'; --查看某一个表的所有索引,注意表名要 大写 select index_name,index_type,status,blevel from user_indexes where table_name = 'TBL_XXX'; --查看索引的构成,注意表名要 大写 select table_name,index_name,column_name, column_position FROM user_ind_columns WHERE table_name='TBL_XXX'; --系统数据字典 DBA_TABLESPACES 中记录了关于表空间的详细信息 select * from sys.dba_tablespaces; --查看用户序列 select * from user_sequences; --查看数据库序列 select * from dba_sequences;