[linux] docker centos中文乱码问题
1 | localedef -i zh_CN -f UTF-8 zh_CN.UTF-8 |
点击阅读
[Oracle]oracle 事物隔离级别(isolation level)
点击阅读
[Oracle]oracle archive log
1、archive log 语法
ARCHIVE LOG {LIST | STOP} | {START | NEXT | ALL | integer } [TO destination]
停止或者启动在线重做日志的自动归档,手动归档指定的redo log files,或者显示redo log文件信息。
2、list:查看当前redo log file的归档范围,当前日志组文件的序列号,当前的归档地址,如果数据库使用归档模式并且自动归档,显示如下
1 | ARCHIVE LOG LIST |
上面显示当前的日志序列号和下一个日志序列号相同,表示automatic archival已经归档了所有的日志组到当前的日志组。
如果是使用了归档模式,但是禁用了自动归档,那么显示可能如下:
1 | Oldest online log sequence 222 |
启动非归档模式,使用list查看是看不到Next log sequence to archive的信息的。
2、stop:禁用自动归档。
如果实例在归档模式并且redo log文件组满了,数据库会处于停止状态,直到redo日志文件被归档(手动归档archive log next或者archive log all)(该参数在11g已经被弃用)
3、start:启用自动归档(该参数在11g已经被弃用)。
启动后台进程arch执行自动归档。如果arch被启动和一个文件名被提供,指定的文件名变为新的默认归档地址。如果log_archive_start设置为true,实例自动的时候自动arch进程自动启动。(log_archive_start参数在10g已经被弃用,但是这个参数还被保留,在10g之后不管该参数为flase还是true,数据库都是自动归档的)
4、next:手动归档下一个被填满但是未归档的redo log file。
5、all:手动归档所有的被填满但是未归档的redo log file。
6、由非归档模式启动到归档模式
1 | 11:35:35 SYS@ boston> archive log list; |
点击阅读
[Oracle]oracle查看被弃用的参数
SELECT name from v$parameter WHERE isdeprecated = 'TRUE' ORDER BY name;
11GR2
1 | 14:20:09 SYS@ boston> SELECT name from v$parameter WHERE isdeprecated = 'TRUE' ORDER BY name; |
点击阅读
[Oracle]oracle后台进程pmon、smon、dbw、lgwr、ckpt、mmon、mmnl、reco、arcn
1、pmon group
pmon组包括:pmon、cleanup main process(clmn)、cleanup helper process(clnn)进程
这些进程用于监控和清理其他进程。pmon group监视buffer cache的清理和客户端进程资源的释放。例如,pmon group可以重置活动事务表的状态,释放不需要的锁,从活动进程列表中移除终止进程的id。
1.1、PMON进程:全称process monitor process。
检查其他后端进程是否终止。如果一个服务进程或者dispatcher进程非正常终止,pmon group执行进程恢复。进程终止有很多种:系统杀掉或者alter system kill session语句杀掉。
1.2、CLMN进程:cleanup main process。
pomn进程委派给clmn清除工作。clmn周期性执行已经超时的终止进程、终止会话、事物、网络连接、空闲会话、附加事物、附加网络连接的清理工作。
1.3、clnn:cleanup helper process。
clmn进程委派clnn完成清理工作。clnn进程协助清理终止的进程和会话
可以通过查看V$CLEANUP_PROCESS或者 V$DEAD_CLEANUP视图来查看clmn清理的元数据。如果V$CLEANUP_PROCESS.STATE 值为busy,那么表示当前正在执行清理工作。
数据库资源隔离:pmon group可以自动的隔离损坏的未修复的资源,这样可以避免实例强制终止。可以通过 V$QUARANTINE视图查看元数据。
2、PMAN:process manager
监视shared server、pooled server、job queue等进程
pman监控、启动、停止下面的进程:
Dispatcher and shared server processes
Connection broker and pooled server processes for database resident connection pools
Job queue processes
Restartable background processes
3、LREG:listener registration process。
用于注册oralce实例信息和分配器信息到oracle net listener。当实例启动,LREG轮询listener来确定是否正常运行。如果listener运行,LREG传递给它相关参数。如果没有运行,LREG进程周期性尝试连接它。
** 在12c之前,pmon进程执行监听注册。
4、SMON:system monitor process。
smon负责各个系统级别的清理工作
执行实例恢复(如果实例在启动时有必要的话)。在rac数据库,一个数据库实例的smon进程能够执行一个失败的实例的恢复。
恢复被终止的事物(因为file-read或者表空间离线错误在实例恢复的过程中跳过的事务),当表空间或者文件online之后,smon恢复事务。
清理不用的临时段。例如:当创建索引的时候分配extent,如果操作失败,smon清理临时空间。
合并属于字典管理的表空间的相邻空闲段
5、DBW:database writer process。
dbw把db buffer的内容写入数据文件。一个进程DBW0对于大多数系统就足够用了,但是可以配置多个进程:DBW1-DBW9,DBWa-DBWz,BW36-BW99来提高系统修改数据的性能。但是对于单处理器的系统来说,配置多个进程也不起作用。
DBW写脏块的条件:
当服务进程在buffer内找不到可用的buffer块时,服务进程发信号给DBW让其刷脏块。DBW可以在执行其他进程时异步刷新脏块。
DBW周期性执行刷脏来推进checkpoint,checkponit位置用于redo线程实例恢复开始的位置。checkpoint的日志位置由buffer cache最老的脏块决定。
在许多情况下,dbw刷脏是遍历所有磁盘的。因此,DBW相比于顺序写的LGWR性能慢。
6、LGWR:log wirter process。
写redo的buffer数据到online redo log。
执行条件:
用户commit
online redo log switch
每3s执行一次
redo log buffer占用了buffered data的1/3或者是占用了1M
DBW
7、ckpt:checkpoint process
将checkpoint information更新到控制文件和数据文件的头信息里,并向dbw进程发送信号使其写数据到磁盘。
checkpoint information包括信息:检查点、scn、开始恢复的在线redo日志的位置
8、mmon:manageability monitor process
执行和automatic workload repository(awr)相关的任务。
mmnl:manageability monitor lite process:当ash的buffer满了,把sga下的ash的buffer数据写到磁盘。
9、RECO:recoverer process
自动连接到存在可疑分布式事务的其他的数据库。当RECO重建了数据库之间的连接,它自动解决可疑事务,移除每个数据库的等待事务表的任意行(与前面解决事务相关的行)。
10、ARCn:Archiiver processes
在redo log切换之后,拷贝online redo log到离线存储。该进程还能用于收集事务redo数据传送到standby数据库目的地。
点击阅读
[Oracle]DNS配置oracle scan ip
1、关闭防火墙开启相应的服务
1 | [root@localhost ~]#setenforce 0 |
2、主节点安装dns
yum -y install bind bind-chroot bind-utils
3、修改配置文件
3.1、/etc/named.conf—–主配置文件,服务器主要运行参数
修改dns主配置文件
1 | options { |
3.2、/etc/named.rfc1912.zones—–区域文件,主要指定要解析哪个域名
vim /etc/named.rfc1912.zones
1 | // 首先对文件中正向解析的区域进行修改 |
3.3、配置完成之后校验一下文件配置是否正确
1 | [root@node4 named]# named-checkconf |
3.4、/var/named/xxx.xx ——-数据文件,用来正向和反向的解析
主文件及区域文件修改完成后接下来进行数据文件的修改,切换到/var/named目录下,对数据文件进行相应的选项配置
1 | cd /var/named/ |
首先对其正向解析的数据文件进行配置
vim node.conf
1 | $TTL 3H |
对反向解析的数据文件进行配置,反向解析数据文件里面只有SOA、NS、PTR资源记录,所有A记录都要改为PTR记录,名称为IP地址,IP地址可以写全也可以简写,如果写全则是IP地址反写加上.in-addr.arpa.例如:116.2.16.172.in-addr.arpa. PTR资源记录的值为域名
1 | cp named.empty node.txt |
3.5、解析文件参数详解
区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
$TTL表示宏定义,TTL(Time- To-Live),dns记录在本地DNS服务器上保留的时间
@符号可代表区域文件/etc/named.conf里面定义的区域名称,即:”gfs.com.”。
2018030422 ;标识序列号,十进制数字,不能超过10位,通常使用日期
2H ;刷新时间,即每隔多久到主服务器检查一次,此处为2小时,实验环境可以设置小一点
4M ;重试时间,应该小于刷新时间,此处为4分钟,实验环境可以设置小一点
1D ;过期时间,此处为1天
2D ;主服务器挂后,从服务器至多工作的时间,此处为2天)
这个文件里所有的域名结尾的点号一定不能省略。
区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,因此区域解析库文件的属组应设置为named。
(1)A记录(Address)正向解析
A记录是将一个主机名(全称域名FQDN)和一个IP地址关联起来。这也是大多数客户端程序默认的查询类型。
(2)PTR记录(Pointer)反向解析
PTR记录将一个IP地址对应到主机名(全称域名FQDN)。这些记录保存在in-addr.arpa域中。
(3)CNAME记录(Canonical Name)别名
别名记录,也称为规范名字(Canonical Name)。这种记录允许您将多个名字映射到同一台计算机。
(4)MX记录(Mail eXchange)
MX记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器。MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。
当有多个MX记录(即有多个邮件服务器)时,则需要设置数值来确定其优先级。通过设置优先级数字来指明首选服务器,数字越小表示优先级越高。
(5)NS记录(Name Server)
NS(Name Server)记录是域名服务器记录,也称为授权服务器,用来指定该域名由哪个DNS服务器来进行解析。
将网站的NS记录指向到目标地址,在设置NS记录的同时还需要设置目标网站的指向,否则NS记录将无法正常解析
NS记录优先于A记录。即,如果一个主机地址同时存在NS记录和A记录,则A记录不生效。
(6)AAAA记录 IPV6解析记录
该记录是将域名解析到一个指定的IPV6的IP上。
3.6、相应的数据配置文件完成后对数据文件的属主进行修改
1 | [root@localhost named]#chown named node._ |
3.7、配置完成后检测解析文件是否正确
1 | [root@node4 named]# named-checkzone "oracle.com" node.conf |
3.8、检测反向解析库配置有没有错误
1 | [root@node4 named]# named-checkzone "168.168.192.in-addr.arpa" node.txt |
4、修改完成后启动dns服务
systemctl start named.service
5、在客户端配置dns信息
5.1、修改 /etc/NetworkManager/NetworkManager.conf 文件,防止重启网卡后dns被重置,在main部分添加 “dns=none” 选项
1 | [main] |
5.2、NetworkManager重新装载上面修改的配置
systemctl restart NetworkManager.service
5.3、之后修改/etc/resolv.conf配置文件
1 | [root@node2 ~]# more /etc/resolv.conf |
5.4、测试dns是否能正常解析
正向解析
1 | [root@node2 ~]# dig -t A scan.oracle.com |
反向解析
1 | [root@node2 ~]# dig -x 192.168.168.111 |
多次ping域名scan.oracle.com,解析为不同的ip地址
1 | [root@dax-mysql-slave ~]# ping scan.oracle.com |
点击阅读
[Oracle]oracle adg role transaction(角色切换)
1、如果保护模式使maximum protection mode,在主库宕掉的情况下使用failover必须将备库的保护模式切换为maximium performance才能执行切换操作
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
2、手动执行switchover进行角色切换
2.1、确认主库的状态,是否可以切换为备库角色
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
只有值为TO STANDBY或者SESSIONS ACTIVE才表示主库可以被切换为备库,如果不是这两个值,则不能进行切换(可能redo transport配置问题或者功能异常)
2.2、开始主库执行切换
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
如果2.1查到的值为to standy,那么执行上面的语句可以省略WITH SESSION SHUTDOWN
2.3、关闭数据库,并启动到mount状态
1 | SQL> SHUTDOWN ABORT; |
2.4、从库查询切换状态是否可以切换为主库
1 | SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; |
只有值为TO_PRIMARY或者SESSIONS ACTIVE才表示备库可以切换为主库角色,如果不是这两个值,需要确认redo apply是否激活和redo transport状态是否正常。
2.5、备库执行切换为主库角色
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果2.4查到的值为to_primary,可以省略WITH SESSION SHUTDOWN
2.6、打开新的主库
ALTER DATABASE OPEN;
2.7、在新的从库启用redo apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
3、当主库宕机无法启动,使用failover的方式切换备库为主库
3.1、如果主库是处在mount状态,没办法open的情况下,可以使用下面命令把未传送到备库的archive和redo发送到备库,以确保数据不丢失
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;
target_db_name为备库的DB_UNIQUE_NAME
3.2、如果主库不能够被mount,但是主库的操作系统可以被正常访问,备库查看每个日志线程的最高日志序列号
1 | 03:48:57 SYS@ cbislave> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG; |
主库的归档日志对应为-rw-r----- 1 oracle oinstall 172M Sep 6 03:48 1_45_1017616040.dbf
把当前45号及以后的归档拷贝到从库,并把丢失的日志注册到从库,注册命令如下:SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3.3、查看和解决归档日志间隙
查看视图v$ARCHIVE_GAP,来查看备库是否有redo gap
1 | SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; |
上面例子中线程1存在序列号为90、91、92的归档日志间隙,如果可以在主库找到对应的归档日志,拷贝到备库,进行日志注册SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3.4、如果3.2和3.3的步骤都没办法操作(比如主节点没办法访问),那么只能执行后面的切换,会丢失数据
3.5、备库停止redo apply
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3.6、结束应用所有收到的redo data
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
如果这一步没有报错,进行下一步操作。如果提示错误,一些收到的redo data没有被应用,试着解决提示的错误在执行下一步。如果3.2、3.3、3.4提到的日志间隙没有解决也会提示对应的日志间隙的错误。如果错误不能解决,在备库执行下面语句(面临数据丢失)SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
3.7、备库查看切换状态
1 | SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; |
值为TO PRIMARY或者session active表示可以切换为主库角色。
3.8、备库切换为主库角色
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
3.7查到的值为to_primary,可以省略WITH SESSION SHUTDOWN
3.9、打开新的主库
SQL> ALTER DATABASE OPEN;
3.10、新的主库起来之后建议执行以下全库备份
4、经过上面3的步骤之后,旧的主库(如果能起来的话)不可用了,但是可以使用flashback database方法切换为备库
4.1、在新的主库(旧的备库)上查看旧的备库切换为新的额主库的scn值
SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
4.2、在旧的主库上执行闪回,将其闪回到4.1查询到的scn号
1 | SQL> SHUTDOWN IMMEDIATE; |
4.3、下面切换旧的主库为物理备库
1 | SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; |
4.4、开始向新的备库(旧的主库)传输redo
在新的主库上先执行下面语句
4.4.1、查看归档地址状态
SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION,ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;
4.4.2、如果有必要启用地址
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=ENABLE;
4.4.3、执行日志切换,确保新的备库可以收到redo
1 | SQL> ALTER SYSTEM SWITCH LOGFILE; |
4.5、新的备库启动redo apply
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
点击阅读
[Oracle]oracle exp-11.2.0.1导出空表的临时解决方案
1、如果是新建表,可以在新建表之前,关闭oracle11g的延迟创建段功能
1 | 11:19:05 SYS@ boston> show parameter deferred |
创建新表默认分配segment
1 | 11:20:32 TE@ boston> create table test4 (id int); |
2、如果是在deferred_segment_creation为true的情况下创建的表,那么只能手动给表添加segment
1 | 11:22:12 TE@ boston> select table_name,segment_created from user_tables where segment_created='NO'; |
然后手动执行拼接后的sql,如果语句较多可以编辑到文档中
1 | 11:25:58 TE@ boston> alter table TEST1 allocate extent; |
执行完成之后,查看空表已经被分配了新的段
1 | 11:26:13 TE@ boston> select table_name,segment_created from user_tables; |
点击阅读
[Oracle]oracle exp版本11.2.0.1和11.2.0.4区别
1、对于没有分配segment的空表来说,使用不同版本exp导出时,结果存在差异
exp-11.2.0.1
1 | [oracle@dax-mysql-master bin]$ ./exp te/te12345678@boston177 file=/tmp/daochu.dmp log=/tmp/daochu.log |
11.2.0.1版本的exp导出时,如果表没有被分配segment,导出时会提示错误EXP-00003
exp-11.2.0.3
1 | [oracle@node3 bin]$ ./exp te/te12345678@boston177 file=/tmp/daochu.dmp log=/tmp/daochu.log |
使用11.2.0.3以及高版本的11.2.0.4导出数据都可以直接导出未分配segment的空表