Linux中Oracle下DG主从备份----DG环境搭建

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;

主:                                                                                                     

Linux中Oracle下DG主从备份----DG环境搭建_第1张图片

从:

Linux中Oracle下DG主从备份----DG环境搭建_第2张图片

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;

Linux中Oracle下DG主从备份----DG环境搭建_第3张图片

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;

Linux中Oracle下DG主从备份----DG环境搭建_第4张图片

7.查看表空间的使用情况:

SELECT SUM(BYTES)/(1024*1024) AS FREE_SPACE,TABLESPACE_NAME 
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;

Linux中Oracle下DG主从备份----DG环境搭建_第5张图片

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;

Linux中Oracle下DG主从备份----DG环境搭建_第6张图片

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;

Linux中Oracle下DG主从备份----DG环境搭建_第7张图片

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;

 

你可能感兴趣的:(Linux)