数据库管理③控制文件

Posted DB架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库管理③控制文件相关的知识,希望对你有一定的参考价值。

关键文件

(1、系统 TBS文件;2、控制文件;3、日志文件的当前日志文件;4、undo文件)

如果关键文件算坏,则数据库挂起或无法工作

1. 控制文件的功能和特点

1) 定义数据库当前物理状态 -- 控制文件实时更新,不停地记录信息

2) 维护数据的一致性 -- 和数据文件头部记录SCN对比

3) 是一个二进制文件

4) 在mount阶段被读取

5) 记录RMAN备份的元数据

2. 查看控制文件位置的方法

2.1 参数查看

[oracle@oracle-db-19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Mar 31 09:12:22 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show user;
USER is "SYS"
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> 
SQL> show parameter control_file

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_file_record_keep_time        integer
7
control_files                        string
/u02/oradata/CDB1/control01.ct
l, /u02/oradata/CDB1/control02
.ctl
SQL> 
+++++++++++++++++++++++++++++++++++++++++++++++
-- control_file_record_keep_time	7	 :RMAN元数据保留天数
-- 两个目录,控制文件内容一样,多路复用

2.2 进入目录下查看

[oracle@oracle-db-19c dbhome_1]$ cd /u02/oradata/CDB1/
[oracle@oracle-db-19c CDB1]$ pwd
/u02/oradata/CDB1
[oracle@oracle-db-19c CDB1]$ ls -ltr

2.3 视图查看

SQL> 
SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/control01.ctl
/u02/oradata/CDB1/control02.ctl

SQL> 

3. 控制文件多元化

1).配置多个control_files,控制文件最好有三个,是相互镜像的(shutdown下cp命令复制即可),然后修改spfile control_files参数,Oracle建议分配在不同的物理磁盘上.

[oracle@oracle-db-19c CDB1]$ pwd
/u02/oradata/CDB1
[oracle@oracle-db-19c CDB1]$ mkdir -p /u02/disk1
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control01.ctl
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control02.ctl 
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control03.ctl
[oracle@oracle-db-19c CDB1]$ cp /u02/oradata/CDB1/control01.ctl /u02/disk1/control04.ctl
[oracle@oracle-db-19c CDB1]$ rm -rf /u02/disk1/control01.ctl
[oracle@oracle-db-19c CDB1]$ rm -rf /u02/disk1/control02.ctl
[oracle@oracle-db-19c CDB1]$ 

SQL> alter system set control_files='/u02/oradata/CDB1/control01.ctl','/u02/oradata/CDB1/control02.ctl','/u02/disk1/control03.ctl', '/u02/disk1/control04.ctl' scope=spfile;

2).三个control文件要一致(同一版本,scn相同)

-rw-r----- 1 oracle oinstall  7356416 07-16 20: 00 control01.ctl
-rw-r----- 1 oracle oinstall  7356416 07-16 20: 01 control02.ctl
-rw-r----- 1 oracle oinstall  7356416 07-16 20: 01 control03.ctl
-rw-r----- 1 oracle oinstall  7356416 07-16 20: 01 control04.ctl

3).控制文件查看

 v$controlfile 、show parameter controlfile、 v$parameter

4. 控制文件的重建与备份

4.1 trace 文件

可以在mount或open模式下生成一个脚本,用于控制文件重建.(热备)

生成的trace 文件在udump的最新trc文件里

SQL> alter database backup controlfile to trace;
-- 或者指定目录
SQL> alter database backup controlfile to trace as '/u01/app/oracle/oradata/orcl/con.trace';

4.2 binary 文件

控制文件的备份(二进制备份).(热备)

alter database backup controlfile to '/u01/app/oracle/oradata/orcl/con.bak';

5. 控制文件手工恢复

控制文件一旦损坏,系统将崩溃或死机.

单个文件损坏了 :数据库关闭,使用操作系统命令复制其副本到指定的位置.

所有的控制文件丢失 :(正常关闭,shutdown immediate后删除控制文件)

假设控制文件的备份也没有,利用前面做的trace文件重新生成控制文件在nomount 状态下执行trace脚本

5.1 关闭数据库

SQL> shutdown immediate

5.2 删除控制文件

[oracle@oracle-db-19c orcl]$ rm *.ctl     # 删除后缀.ctl的控制文件

5.3 启动数据库started

SQL> startup
SQL> select status from v$instance;
STATUS
---------------
STARTED

5.5 执行con.trace脚本生成控制文件

SQL> 
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/test01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/tbs16k01.dbf'
CHARACTER SET AL32UTF8
; 

5.6 重建控制文件主要有两大部分内容

[oracle@oracle-db-19c orcl] $ ll
# 可以看到执行后三个控制文件又重新建立了.

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

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

1)定义了几个参数的最大值

2)在线日志的物理信息

3)数据文件的物理信息

4)使用的字符集.

第二部分是隐含的不可见信息:

比如SCN信息,关键步骤是将当前所有数据文件头部的最新SCN信息复制到了控制文件中.以便接下来打开数据库.

SQL> 
SQL> select file#, checkpoint_change# from v$datafile;      -- 从控制文件读出

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           31445128
         3           31445128
         4           31445128
         5            2160789
         6            2160789
         7           31445128
         8            2160789
         9           31445128
        10           31445128
        11           31445128
        12           31445128

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
        13           31445128
        14           31445128
        15           31445128
        16           31445128
        85           31445128
       126           31445128
       127           31445128
       154           31445128
       155           31445128
       162           21742070
       163           31445128

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
       164           21742070
       165           21742070
       166           21742070
       169           31445128
       181           31445128

27 rows selected.

SQL> select file#, checkpoint_change# from v$datafile_header;   -- 从数据文件读出

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1           31445128
         3           31445128
         4           31445128
         5            2160789
         6            2160789
         7           31445128
         8            2160789
         9           31445128
        10           31445128
        11           31445128
        12           31445128

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
        13           31445128
        14           31445128
        15           31445128
        16           31445128
        85           31445128
       126           31445128
       127           31445128
       154           31445128
       155           31445128
       162           21742070
       163           31445128

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
       164           21742070
       165           21742070
       166           21742070
       169           31445128
       181           31445128

27 rows selected.

SQL> 
-- 控制文件已创建

5.7 处于MOUNTED状态

SQL> select status from v$instance;

STATUS
------------------------------------
MOUNTED

SQL> 

5.8 打开数据库

SQL> alter database open resetlogs;

所有的控制文件丢失,利用控制文件备份(手动备份或RMAN备份都可以)恢复控制文件.(有点复杂,留在053备份恢复中再介绍)

OpenStack 运维 - 部署Nova组件

一、创建Nova数据库并执行授权操作

CT控制节点

mysql -u root -p 

create database nova_api
create database nova
create database nova_cell0;

grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_api.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'NOVA_DBPASS';
flush privileges;
exit

二、管理Nova用户及服务

① 创建Nova用户

#把nova用户添加到service项目,拥有admin权限
openstack user create --domain default --password NOVA_PASS nova

openstack role add --project service --user nova admin

② 创建Nova服务

openstack service create --name nova --description "OpenStack Compute" compute

③ Nova关联endpoint端点

openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1

openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1

openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1



④ 安装Nova组件

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

⑤ 修改配置文件

cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

#修改nova.conf
 openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
 openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.1.100 			####修改为 ct的IP(内部IP)
 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
 openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
 openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
 openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
 openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
 openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
 openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
 openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
 openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
 openstack-config --set /etc/nova/nova.conf vnc enabled true
 openstack-config --set /etc/nova/nova.conf vnc server_listen ' $my_ip'
 openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
 openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
 openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
 openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement project_name service
 openstack-config --set /etc/nova/nova.conf placement auth_type password
 openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf placement username placement
 openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS

#查看配置
cat /etc/nova/nova.conf

[DEFAULT]
enabled_apis = osapi_compute,metadata		#指定支持的api类型
my_ip = 192.168.1.100				#定义本地IP
use_neutron = true					#通过neutron获取IP地址
firewall_driver = nova.virt.firewall.NoopFirewallDriver
transport_url = rabbit://openstack:RABBIT_PASS@ct	#指定连接的rabbitmq

[api]
auth_strategy = keystone				#指定使用keystone认证

[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api

[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova

[devices]
[ephemeral_storage_encryption]
[filter_scheduler]

[glance]
api_servers = http://ct:9292

[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]

[keystone_authtoken]				#配置keystone的认证信息
auth_url = http://ct:5000/v3				#到此url去认证
memcached_servers = ct:11211			#memcache数据库地址:端口
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[libvirt]
[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]

[oslo_concurrency]					#指定锁路径
lock_path = /var/lib/nova/tmp			#锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行

[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]

[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS

[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
[vnc]						#此处如果配置不正确,则连接不上虚拟机的控制台
enabled = true		
server_listen =  $my_ip				#指定vnc的监听地址
server_proxyclient_address =  $my_ip			#server的客户端地址为本机地址;此地址是管理网的地址

[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement

⑥ 初始化数据库

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
#创建cell单元格
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

su -s /bin/sh -c "nova-manage db sync" nova

验证cell0和cell1是否注册成功

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova


查看日志文件

tail -f /var/log/nova/nova-manage.log

⑦ 启动Nova服务并查看端口

systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

【netstat】命令用于显示各种网络相关信息
【-tnlup】选项组合使用
-t:仅显示tcp相关选项
-n:拒绝显示别名,能显示数字的全部转化为数字
-l:仅列出在Listen(监听)下的服务状态
-u:仅显示udp相关选项
-p:显示建立相关链接的程序名
【curl】命令用于模拟http浏览器发起访问向ct:8774,用作测试


三、计算节点配置 Nova 服务

C1/C2节点

① 安装nova-computer插件

yum -y install openstack-nova-compute

② 修改配置文件

cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

#注意修改本机IP
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.1.250
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
 openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.1.250:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu

③ 开启服务

systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service

四、在控制节点测试计算节点

openstack compute service list --service nova-compute

② 扫描当前有几个可用的计算节点

#扫描到可用节点后,会将其创建到cell中,后续就可以在cell中创建虚拟机
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

③ 修改控制nova的配置文件

vim /etc/nova/nova.conf

[scheduler]
#每300秒扫描一次
discover_hosts_in_cells_interval = 300

systemctl restart openstack-nova-api.service

④ 验证计算节点服务

openstack compute service list

⑤ 查看各个组件API是否正常

openstack catalog list

⑥ 查看镜像

openstack image list

⑦ 查看cell API和Placement API是否正常

nova-status upgrade check

以上是关于数据库管理③控制文件的主要内容,如果未能解决你的问题,请参考以下文章

讲讲新人的oracle数据库学习

《Oracle完全学习手册》 表空间&管理控制文件与日志文件&表 学习笔记

Oracle Database 控制文件管理

Oracle管理数据库实例

win10下pl/sql连接oracle数据库时以管理员身份运行才能连上

linux运维架构之路-MySQL