当前位置: 首页 > news >正文

Oracle 文件管理-参数文件、控制文件、归档

STARTUP 起库:

  1. 加载参数文件 --》startup nomount
  2. 加载控制文件 --》startup mount
  3. 加载数据文件等所有文件--》startup (打开到open)

1.1 参数文件

spfile(服务器参数文件) 是一个二进制文件,存储在服务端的 $ORACLE_HOME/dbs 目录下。不能直接用文本编辑器修改参数,而是通过 sqlplus 中的命令动态修改。由于其二进制特性,修改后可以立即生效,无需重启数据库。

pfile(参数文件) 是一个文本文件,可以存储在客户端或服务端,用文本编辑器进行查看和修改。修改 pfile 后,需要重启数据库才能使更改生效。pfile 在启动数据库时提供参数配置,可以作为 spfile 的备份或在特定情况下使用。

1.1.1 优先级别:

oracle 启动读取参数文件的顺序,如果个文件都不存在,则Oracle会报错

spfile.ora --> spfile.ora -->init.ora -->init.ora

1.1.2 默认目录:
$ORACLE_HOME/dbs
1.1.3 参数文件之间的转换
-- spfile-->pfile转换
SQL> create pfile from spfile;
SQL> !ls $ORACLE_HOME/dbs/initorcl.ora
/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora-- 生成在指定路径
SQL> create pfile='/tmp/initorcl.ora' from spfile;-- pfile-->spfile 转换
SQL> create spfile='/tmp/spfileorcl.ora' from pfile;--可以用strings命令查看创建的spfile文件,查出来的结过和pfile是一样的。

其他:

--优先级:
SINSTANCE_MODIFIABLE > ISSYS_MODIFIABLE > ISSES_MODIFIABLE --修改参数
alter	system|session set	parameter_name=values scope=memory|spfile|both sid='<sid>'|'*';--重置默认参数
aler system reset parameter_name scope=spfile sid='<sid>'|'*';--显示系统中隐藏参数:
select ksppinm,ksppstvl from x$ksppi a, x$ksppcv b where a.indx=b.indx
1.1.4 判断数据库从SPFILE还是PFILE启动
-- 方式1:
-- 如果是spfile,则value是有值的
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ---------- ----------------------------
spfile string /u01/app/oracle/product/11.2.0
/db_1/dbs/spfileorcl.ora

-- 方式2:
SQL> set linesize 120
SQL> col name format a10
SQL> col value format a60
SQL> select name,value from v$parameter where name='spfile';
NAME 		VALUE
------	 	--------------------------------------------------------
spfile 		/u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora

1.1.5 修改参数文件的三种模式:
scope=both 立即并永久生效,(默认模式)
scope=spfile 下次启动才能生效。
scope=memory 立即生效但下次启动时失效##查询方法:v$parameter
isses_modifiable:
ISSES_MODIFIABLE=true
表明这个参数可以在session级别可以修改,并且立即生效。false就是不能修改
issys_modifiable:
issys_modifiable=immediate
表示这个参数可以在system立即修改,并且立即生效。
若如果issys_modifiable=deferred
会话级别参数,直接通过alter session set 参数名=值;
issys_modifiable=false
表示这个参数不能在直接修改在内存中,需要加scope=spfile,重启后才能生效。比如:
SQL> select name, isses_modifiable,issys_modifiable from v$parameter where
name='sga_max_size';
NAME ISSES ISSYS_MOD
------------------------------ ----- ---------
sga_max_size FALSE FALSE ##两个都为false
SQL> alter system set sga_max_size=900M;
alter system set sga_max_size=900M
*
第 1 行出现错误:
ORA-02095: 无法修改指定的初始化参数
SQL> alter system set sga_max_size=800M scope=spfile;
系统已更改。
恢复参数到默认值
SQL> alter system reset sga_max_size scope=spfile;
总结:
一般scope常用的参数是both和spfile。
扩展1:spfile 默认参数文件含义介绍

在Oracle数据库中,spfile(服务器参数文件)和pfile(文本参数文件)用于存储初始化参数。spfile参数带有前缀*,而pfile参数则不带。以下是一些常见的spfile参数及其含义:

  • db_name:这是数据库的名称,是在创建数据库时指定的。
  • compatible:用于指定数据库的兼容版本,允许数据库在旧版本的兼容模式下运行。
  • allow_resetlogs_corruption:危险参数,仅在紧急恢复情况下使用,可能会导致数据库损坏。
  • remote_login_passwordfile:定义密码文件的使用方式,有三种选项:none(不使用),shared(多个实例共享),exclusive(仅本实例使用)。
  • audit_file_dest:审计文件的存放位置。
  • background_dump_dest:后台进程日志的存放位置。
  • control_files:指定控制文件的位置。
  • core_dump_dest:核心转储文件的存放位置。
  • db_block_size:数据库的块大小,通常为8KB。
  • db_domain:数据库的域名,通常为空。
  • db_file_multiblock_read_count:指定单次I/O操作可以读取的块数。
  • db_recovery_file_dest:闪回恢复区的存放路径。
  • db_recovery_file_dest_size:闪回恢复区的大小。
  • dispatchers:配置共享服务器进程。
  • job_queue_processes:允许并发运行的作业进程数。
  • local_listener:本地监听服务的名称。
  • open_cursors:允许同时打开的游标数。
  • pga_aggregate_target:PGA的内存大小。
  • processes:允许并发运行的进程数。
  • sga_target:SGA的内存大小。
  • undo_management:Undo表空间的管理方式,通常为AUTO。
  • undo_tablespace:Undo表空间的名称。
  • user_dump_dest:用户进程转储文件的存放位置。

1.2 控制文件

1.2.1 控制文件存储的主要信息
DBID
数据库名称和SID标识
数据文件和日志文件列表
数据库创建的时间戳
表空间信息
当前重做日志文件序列号(scn)
归档日志信息
检查点信息
回滚段的起始与结束
备份数据文件信息
1.2.2 控制文件位置
select name from v$controlfile;show parameter control_files;
1.2.3 控制文件管理
为了提高数据库的安全性,至少要为数据库建立两个控制文件,而且这两个文件最好分别放在不同的磁盘
中,这样可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略称为多路复用控制文件。
当多路复用控制文件某个磁盘发生故障导致其包含的控制文件损坏,数据库将被关闭或者发生异常,
此时可以用另一磁盘中保存的控制文件来恢复被损坏的控制位文件,然后再重启数据库,
达到保护控制文件的目的。数据库建立时,一般会默认创建两个控制文件,我们可以手动的再创建多个控制文件且不要与默认的放在
同一个磁盘中,首先我们可以修改control_files参数来增加控制文件。
扩展2:可以dump一个trc分析一下控制文件内容

大致有六部分:通用文件头、 数据库信息、检查点进度记录CHECKPOINT PROGRESS RECORDS、扩展的数据库信息、重做线程、日志文件,有兴趣可以自己了解一下,这里就不整理了。

实战一:重建控制文件

1.备份 backup controlfile

# 数据库打开时是不能直接操作系统界别cp控制文件的,可以使用backup语句
alter database backup controlfile to '/u01/app/oracle/oradata/PROD/control.ctl.bk';

2.backup to trace

1)#在 mount 或 open 模式生成一个 trace 文件,包含重建控制文件的语句  
alter database backup controlfile to trace;
#默认文件内容保存在 Default Trace File 中 
select * from v$diag_info;2)#查看控制文件位置:show parameter control files;
select name from v$controlfile;
#存到自己起的文件名里control.trc
alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD/control.trc';
  1. 恢复控制文件方法

单个文件损毁,通过简单的在操作系统上复制解决

2.所有的控制文件丢失:

①如果有 binary 控制文件备份,利用备份恢复控制文件

②如果没有备份,利用 trace 脚本文件重新创建控制文件(代价:丢失归档记录信息和 RMAN 备份信息)

#Mount 或 open 下生成 trace 脚本  可以cat more查看一下,后面恢复会执行这个control.trc
alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD/control.trc';#正常关库,模拟全部控制文件丢失 启动数据库实例报错 #shutdown immediate; #rm control0[1-3].ctl#startup#nomount 状态 执行重建控制文件语句
#OS:more control.trc
#SQL:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/PROD/redo01.log' SIZE 50M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/PROD/redo02.log' SIZE 50M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/PROD/redo01.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/u01/app/oracle/oradata/PROD/system01.dbf','/u01/app/oracle/oradata/PROD/sysaux01.dbf','/u01/app/oracle/oradata/PROD/undotbs01.dbf','/u01/app/oracle/oradata/PROD/users01.dbf','/u01/app/oracle/oradata/PROD/example01.dbf','/u01/app/oracle/oradata/PROD/tbs16k.dbf'
CHARACTER SET AL32UTF8
;
#这时数据库已在 mount 下 #open 打开数据库 
ALTER DATABASE OPEN; 
#查看有无临时文件
SQL> select * from dba_temp files#添加临时数据文件信息 
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

---如果使用的是 noresetlogs,直接 open 数据库就可以了:

SQL>alter database open;

---如果使用的是 resetlogs 创建的控制文件,那么我们就需要使用:

SQL>alter database open resetlogs;

来打开 DB.

(3)添加 TEMP 表空间

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/app/oracle/oradata/PRODdb/temp01.dbf' size 100M;

v$datafile视图显示的是数据文件(data files),而临时文件(temp files)通常是在v$tempfile视图中查看的。

显示TEMP表空间中所有的临时文件

SELECT file_name, tablespace_name, bytes
FROM dba_temp_files;

说明:这个重建控制文件的过程主要有两大部分内容:

第一部分是脚本中的可见信息:

1)定义 db_name,

2)指定几个参数限定控制文件的最大值,

3)在线日志的物理信息,

4)数据文件的物理信息,

5)使用的字符集。

第二部分是隐含的不可见信息,比如 SCN信息,重建复制了当前所有数据文件头部的最新 SCN

信息复制到了控制文件中。以便接下来打开数据库。

SQL> select file#,checkpoint_change# from v$datafile;

SQL> select file#,checkpoint_change# from v$datafile_header;

什么时候用 RESETLOGS 和 NORESETLOGS 几种情况的说明
  • RESETLOGS:用于不完全恢复、丢失REDOLOG文件或使用备份控制文件的情况。
  • NORESETLOGS:用于完全恢复且控制文件和所有日志文件完好无损的情况。

1.3 归档文件

1.3.1 开归档
mkdir -p /archivelogls -ld /archivelogalter system set log_archive_dest_1='location=/archivelog';show parameter log_archive_dest_1#静态参数,scope=spfile,重启后生效alter system set log_archive_format='arch_PROD_%t_%s_%r.dbf' scope=spfile;shutdown immediate;startup mount;archive log listalter database archivelog;alter database open;archive log list;

实战二:创建Catalog恢复目录

Catalog用于存储RMAN备份信息,并提供更高级的备份和恢复管理功能。确保定期备份恢复目录数据库以避免数据丢失。

方法1:在本地数据库上创建Recovery Catalog
1.1 启动监听器

首先确保监听器已经启动并且运行正常:

有效的配置
lsnrctl start
lsnrctl status
1.2 配置tnsnames.ora

确保能够连接到目标数据库和恢复目录数据库。在$ORACLE_HOME/network/admin目录下配置tnsnames.ora文件:

cd $ORACLE_HOME/network/admin
vi tnsnames.ora

添加如下内容:

EMREP =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = emrep)))ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))
1.3 创建表空间和用户

连接到恢复目录数据库并创建表空间和用户:

sqlplus sys/oracle@emrep as sysdba

执行以下SQL命令:

CREATE TABLESPACE rmantbs 
DATAFILE '/oradata/orcl/rmantbs.dbf' 
SIZE 50M 
AUTOEXTEND ON;CREATE USER rman IDENTIFIED BY rman 
DEFAULT TABLESPACE rmantbs;GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rman;
1.4 创建Catalog

使用RMAN连接到恢复目录数据库并创建Catalog:

rman catalog rman/rman@emrepRMAN> CREATE CATALOG;

验证Catalog创建成功:

sqlplus rman/rman@emrepSELECT table_name, tablespace_name FROM user_tables;
1.5 注册目标数据库

使用RMAN连接到目标数据库并注册到恢复目录:

rman target / catalog rman/rman@emrepRMAN> REGISTER DATABASE;

验证目标数据库是否已注册:

sqlplus rman/rman@emrepSELECT * FROM rc_database;
方法2:在远程数据库上创建Recovery Catalog

单独的恢复目录,能有效提高安全性。

2.1 创建一个单独的数据库(prod)

假设您已经在prod库中创建了恢复目录数据库。我们要对orcl库进行备份,即orcl是目标数据库,prod是恢复目录数据库。

2.2 在prod库中创建表空间

连接到prod数据库:

sqlplus sys/oracle@prod as sysdba

创建表空间:

CREATE TABLESPACE rc_data 
DATAFILE '/u01/app/oracle/oradata/prod/rc_data01.dbf' 
SIZE 100M 
AUTOEXTEND ON 
NEXT 10M 
MAXSIZE UNLIMITED;
2.3 创建用户并授予权限
CREATE USER rc_admin IDENTIFIED BY rc_admin 
DEFAULT TABLESPACE rc_data;GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rc_admin;
2.4 在RMAN中创建Catalog
rman catalog rc_admin/rc_admin@prodRMAN> CREATE CATALOG TABLESPACE rc_data;
2.5 注册目标数据库

连接并注册目标数据库:

rman target sys/oracle@orcl catalog rc_admin/rc_admin@prodRMAN> REGISTER DATABASE;
-- 手动同步Catalog
RMAN> RESYNC CATALOG;
2.6 取消Catalog

如果需要取消注册,可以执行以下命令:

rman target sys/oracle@orcl catalog rc_admin/rc_admin@prodRMAN> UNREGISTER DATABASE;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java语言程序设计——篇九(3)
  • AspectJWeaver反序列化
  • 数据结构经典测试题4
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 二叉树的广度搜索(200分) - 三语言AC题解(Python/Java/Cpp)
  • RabbitMq手动ack的超简单案例+Confirm和Return机制的配置和使用
  • 测试面试宝典(三十三)—— 接口测试有没有测试出什么问题?
  • 二分类、多分类、多标签分类的评价指标
  • 家具购物小程序的设计
  • (源码分析)springsecurity认证授权
  • 简单三步,帮你的照片重现高清,一键拯救摄影废片!
  • STM32——GPIO(点亮LEDLED闪烁)
  • Android中的usescleartexttraffic属性详解
  • 《学会 SpringBoot · 参数校验》
  • MyBatis基本工作原理
  • vue3中父子组件的双向绑定defineModel详细使用方法
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 2017-08-04 前端日报
  • Android框架之Volley
  • docker容器内的网络抓包
  • JavaScript-Array类型
  • SpringBoot 实战 (三) | 配置文件详解
  • vue-loader 源码解析系列之 selector
  • webpack+react项目初体验——记录我的webpack环境配置
  • 人脸识别最新开发经验demo
  • 深入浅出webpack学习(1)--核心概念
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 译米田引理
  • 《天龙八部3D》Unity技术方案揭秘
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​第20课 在Android Native开发中加入新的C++类
  • (0)Nginx 功能特性
  • (1)(1.13) SiK无线电高级配置(五)
  • (12)Hive调优——count distinct去重优化
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (简单) HDU 2612 Find a way,BFS。
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (七)Flink Watermark
  • (十)Flink Table API 和 SQL 基本概念
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十三)MipMap
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .bat批处理(六):替换字符串中匹配的子串
  • .net core + vue 搭建前后端分离的框架
  • .Net core 6.0 升8.0
  • .net core 依赖注入的基本用发
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net环境下的缓存技术介绍
  • .sys文件乱码_python vscode输出乱码
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @KafkaListener注解详解(一)| 常用参数详解
  • []T 还是 []*T, 这是一个问题
  • [12] 使用 CUDA 进行图像处理