Monthly Archives: 11月 2016

记录一次oracle dataguard缺失归档的处理

查看主备库有无新增数据文件:
RMAN> report schema;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name HYGEIA

List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
—- ——– ——————– ——- ————————
1 4096 SYSTEM *** +DATA/hygeia/datafile/system.266.853951045
2 4096 SYSAUX *** +DATA/hygeia/datafile/sysaux.267.853951049
3 27130 UNDOTBS1 *** +DATA/hygeia/datafile/undotbs1.268.853951053
4 22270 UNDOTBS2 *** +DATA/hygeia/datafile/undotbs2.270.853951059
5 2096 USERS *** +DATA/hygeia/datafile/users.271.853951061
6 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.300.854372701
7 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.301.854372845
8 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.302.854372969
9 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.303.854373095
10 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.304.854373217
11 1024 INDX *** +DATA/hygeia/datafile/indx.306.854373395
12 1024 NB *** +DATA/hygeia/datafile/nb.307.854373421
13 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.305.854373337
14 3072 OLD *** +DATA/hygeia/datafile/old.308.854373449
15 1024 WEB *** +DATA/hygeia/datafile/web.310.854373481
16 1024 TOOLS *** +DATA/hygeia/datafile/tools.311.854373519
17 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.309.854373455
18 32000 HYGEIA *** +DATA/hygeia/datafile/hygeia.312.854373631
19 30720 HYGEIA *** +DATA/hygeia/datafile/hygeia.441.877174865
20 30720 HYGEIA *** +DATA/hygeia/datafile/hygeia.442.877175711
21 30720 HYGEIA *** +DATA/hygeia/datafile/hygeia.417.877176157
22 100 OGG *** +DATA/hygeia/datafile/ogg.421.894446377
23 10000 HYGEIA_MZ *** +DATA/hygeia/datafile/hygeia_mz.408.898168189
24 10000 HYGEIA_QRY *** +DATA/hygeia/datafile/hygeia_qry.400.898168277

主备库数据文件相同,没有添加新文件

查看备库当前scn
SQL> select to_char(current_scn) from v$database;

TO_CHAR(CURRENT_SCN)
—————————————-
15179025089230

SQL>
生产库增量备份
run{
allocate channel c1 type disk format=’/u01/rmanbak/%U’;
allocate channel c2 type disk format=’/u01/rmanbak/%U’;
backup incremental from SCN 15179025089230 DATABASE;
release channel c1;
release channel c2;
}
查看备份进度
select s.inst_id, o.sid, CLIENT_INFO ch, context, sofar, totalwork,
round(sofar/totalwork*100,2) “% Complete”
FROM gv$session_longops o, gv$session s
WHERE opname LIKE ‘RMAN%’
AND opname NOT LIKE ‘%aggregate%’
AND o.sid=s.sid
AND totalwork != 0
AND sofar <> totalwork;
创建standby控制文件
alter database create standby controlfile as ‘/u01/rmanbak/control01.ctl.1117’;

备库注册备份片
RMAN> catalog start with ‘/oradata/rmanbak/’;

using target database control file instead of recovery catalog
searching for all files that match the pattern /oradata/rmanbak/

List of Files Unknown to the Database
=====================================
File Name: /oradata/rmanbak/14rl5bn5_1_1
File Name: /oradata/rmanbak/13rl5bn4_1_1
File Name: /oradata/rmanbak/15rl5c9g_1_1

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files…
cataloging done

List of Cataloged Files
=======================
File Name: /oradata/rmanbak/14rl5bn5_1_1
File Name: /oradata/rmanbak/13rl5bn4_1_1
File Name: /oradata/rmanbak/15rl5c9g_1_1
应用备份集
RMAN> recover database noredo;

Starting recover at 2016-11-17 17:32:32
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=891 device type=DISK
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /oradata/DG/datafile/system.266.853951045
destination for restore of datafile 00003: /oradata/DG/datafile/undotbs1.268.85395105
destination for restore of datafile 00004: /oradata/DG/datafile/undotbs2.270.85395105
destination for restore of datafile 00007: /oradata/DG/datafile/hygeia.301.854372845
destination for restore of datafile 00009: /oradata/DG/datafile/hygeia.303.854373095
destination for restore of datafile 00011: /oradata/DG/datafile/indx.306.854373395
destination for restore of datafile 00013: /oradata/DG/datafile/hygeia.305.854373337
destination for restore of datafile 00014: /oradata/DG/datafile/old.308.854373449
destination for restore of datafile 00015: /oradata/DG/datafile/web.310.854373481
destination for restore of datafile 00016: /oradata/DG/datafile/tools.311.854373519
destination for restore of datafile 00018: /oradata/DG/datafile/hygeia.312.854373631
destination for restore of datafile 00020: /oradata/DG/datafile/hygeia.442.877175711
channel ORA_DISK_1: reading from backup piece /oradata/rmanbak/13rl5bn4_1_1
替换控制文件
shutdown immediate 替换文件
startup mount

开启恢复进程
alter database recover managed standby database disconnec from session;

定时删除归档:
# cat deletearchlog.sh
/u01/app/oracle/products/rdbms/bin/rman target / <<EOF
delete noprompt archivelog all completed before ‘sysdate-7’;
exit;
EOF
#crontab -l
…..
21 21 * * * su – oracle -c ‘/home/oracle/deletearchlog.sh’

(转)虚拟机已死 “容器”才是未来?

虚拟机已死 “容器”才是未来?

我也曾经是容器技术尤其是 Docker 粉丝,但用了一年后觉得事情也没那么美好,而颇有一些同学以及一些公司依然认为容器就是银弹,虚拟机已经是昨儿黄花必须打倒,大家赶紧一切皆容器。这里我 对这种观点吐吐槽。仅代表作者个人看法首先要明确的是,软件开发和运维活动中,可维护性、正确性、性能的优先级是依次降低的,不要跟我抬杠少数极端情况。

关于可维护性和正确性的先后,著名的 “worse is better” 文章就是很好的无奈的解释,如果你犹豫这两者,这还情有可原,毕竟真善美和糙快猛的斗争从未停歇,而你如果第一反应觉得性能是最重要的,那就不要继续往下看了,洗洗去睡吧——适合的才是最好的。

那么对于虚拟机 vs 容器,自然我们也需要从这三方面考察。

回合一:可维护性之争

虚拟机—维护性

从 hypervisor 讲,Xen/KVM/vSphere/HyperV 都很成熟了,久经考验,BSD 也在凑热闹搞 bhyve(FreeBSD) 和 vmm(OpenBSD),最近 unikernel 也在试图跑在 hypervisor 上,而 AWS/GCE/Azure 等等云计算巨头以及 Intel/AMD 等在CPU、磁盘和网络IO虚拟化技术上的投资显然不会立马推翻,Linux 上虚拟机的开源管理方案也已成熟定型:libvirt, OpenStack,没人吃饱了撑的去弄个 “新的开源” 项目替换它们,虽然我很不喜欢 OpenStack 的乱糟和复杂。VM 的动态迁移也是成熟技术,出来好多年了,实现原理非常简单,反正整个 OS 内存一锅端弄过去,不操心少个依赖进程的内存没过去。想用不同版本内核? 想要自定义内核模块?想调整内核参数?期望更安全的隔离?期望如同物理机版几乎一致的使用体验?VM 就是虚拟机的缩写嘛,这些都是拿手戏。

容器— 维护性

Linux 容器,Linux 一贯的作风,慢慢演化,不求仔细设计,然后就是 cgroup, pid/uts/ipc/net/uid namespace 一个个实现出来,凑出一个容器技术,貌似 uid namespace 还是最近刚刚出来的特性。用户空间则更是群雄并起,LXC,Docker,rkt,LXD,各有拥蹇,鹿死谁手,还真不好说,在这个局还没明朗的时候,Mesos、Swarm、Kubernetes、Nomad 又出来一堆搅局的,眼下看来最吸引眼球的 Kubernetes 俨然有 OpenStack 继任者的感觉,但依然很嫩,没几个人敢在生产环境大规模使用。

Linux容器里进程的跨机器动态迁移我还没听说,不要说是个服务就得有集群有 HA 嘛,可还真有不少用户一个服务就单机顶着呢,就算有热备或者冷备,在线那台机器内存里的东西可宝贵了,轻易不能丢。用Linux容器就不能挑内核,不能加载内核模块,不能挂载文件系统,不能调整内核参数,不能改网络配置,等等,不要告诉我你能——你是不是开了 docker run –privileged 了? 你是不是没 drop capability?你是不是没有 remap uid?话说某大公司的容器还真就用 –privileged 选项跑的呢。 而 Linux 的隔离不彻底恐怕大部分人都没意识到,/sys, /dev, /selinux 还有 /proc 下的某些关键文件比如 /proc/kcore 没隔离呢。

Redhat 做的 project Atomic 意识到这些问题,正在积极的给 Docker 加 SELinux 支持,指定 SELinux policy,但 Docker 官方爱搭不理,而且 SELinux 这种高端技术是凡人玩的么? 结局大概依然是 “FAQ 1: 关掉 SELinux”。Linux 容器本来并不局限在一个容器里跑几个进程,但 Docker 官方为了加强“轻量级”这词的洗脑效果,搞出个无比脑残的 single process 理念,被无数人捧臭脚,所幸有些人慢慢意识到问题,Yelp 搞了个 dumb-init 擦了一半屁股,还有无数 docker image 用 runit、supervisor 之类的做 /sbin/init 替换,但问题在于这要自定义启动脚本,需要加 ssh/cron/syslog/logrotate 等等边角料——这已然是解决了无数遍的问题,还要解决一遍,不觉得麻烦吗?难道没有人认为这些包的作者或者打包者更善于处理服务启动脚本么?像 systemd 那种搞法还算正道,特意考虑容器环境,跳过一些步骤,但貌似还没做完善,需要手动删除一些 .service 文件。

虚拟机 vs 容器

也许有人会说 docker pull/push 多方便啊,docker build 多方便啊,可不要忘了,vm image storage 早在 openstack 里就解决了,自己处理也不是个大事,vm image build 也有 Hashicorp 的 Packer 工具代劳,不是个事。Docker 自豪的官方 docker registry 其实大家最多用用 base os image,那些 app 级别的出于信任以及定制考虑都会自己 build。而 Docker 自豪的 layered storage 也是无数血泪,aufs & overlayfs 坑了多少人?容器社区最近还特崇拜 immutable deployment,以把容器根文件系统弄做只读的为荣,全然不管有紧急安全更新或者功能修正怎么处理——什么,你要说 docker rm && docker run 再起一批不就完事么?真有这么简单就好了。

像 Linux kernel 和 git 那种才是正经 unix 设计的思想,分层堆叠,底层提供mechanism,高层提供 policy,各取所需,可惜人总是易于被洗脑,在接受各种高大上policy的时候全然忘了mechanism还在不在自己手里。

回合二:正确性之争

强隔离、full OS 体验、保留 mechanism,这才是正道。另外容器还隐藏了一个坑,/proc/cpuinfo和free命令输出是host os的,这坑了无数探测系统资源自动决定默认线程池和内存池大小的程序,尤以Java最为普遍。

回合三:性能之争

容器粉丝津津乐道——启动容器快,容器的开销少。 这两点确实如此但好处真的有那么巨大么?谁有事没事不停创建虚拟机?谁的虚拟机生命周期平均在分钟级别?谁的“用完全启动时间”平均在秒级? 至于说到虚拟机浪费的资源太多,其实也就是个障眼法。理论上服务器的资源利用率平均不应该超过 80%而实际上绝大部分公司的服务器资源利用率应该都不到 50%,大量的CPU、内存、本地磁盘都是常年浪费的,所以 VM 的额外开销不过是浪费了原本就在浪费的资源罢了。就单机的巅峰 I/O 能力来言,VM 确实不敌容器。

但平时根本就用不到巅峰状态, 原本一个 VM 里多进程干的事,非得搞多个容器跑,这容器开销,这人力开销怎么算?

关于容器还有一个幻想,那就是可以在物理机上直接跑容器,开销巨低、管理巨方便,用专用物理机方式提供多租户强隔离。前面两点上面已经驳过了,话说还有人用 openstack 管理 docker 容器呢。 我只是说一下第三点,在一台物理机上直接跑容器的一个最容易被忽视的问题:现在用来提供云服务的物理机一般都是硬件超级牛逼,跑上百个容器都没问题,但问题在于用户很可能只需要几个容器,所以要么跟人共用物理机,要么浪费资源白交钱。哪怕用户需要上百个容器,出于容灾考虑,也不可以把上百容器部署到一台物理机上,所以还是要么跟人共用物理机,要么浪费资源。

方案

以上是我的观点,我并不是“容器黑”,而是“实用白”。AWS、Azure、GCE 都主推在虚拟机上跑容器,按虚拟机收费,这非常明智的解决了问题:老的纯 VM 基础设施不用动,计费照旧,单物理机可以被安全的多租户共用,资源隔离有保证(起码比共享内核强多了),把容器管理软件如“kubernetes”给用户,既满足用户的容器需求,又不担心容器的多租户问题。

所以我认为:以 VM 为基础,以容器为辅助点,要买就买 VM,自己管理容器,别买 CAAS 直接提供的容器,别看不到底下物理机或者虚拟机。用 VM 还是用容器,冷静考察自己的应用上容器是否有好处。最后,残念,VM 开源管理软件能搞个比 OpenStack 简单的东西吗?

本文来源:cnbeta网站 责任编辑:张彬彬_NT5025

 

 

 

 

 

(转)oracle rac修改ip的处理办法

oracle rac修改ip的处理办法

2013-12-30 10:01:32

分类: Oracle

1、前言
最近有一个客户,想搬迁机房,但他们有一套oracle rac,搬迁后,要修改ip地址,怕出问题,叫我们现场支持一下!我们也到现场服务,并且帮他们修改了ip地址,并且成功启动服务,现在把整个过程记录下来,供大家参阅!

2、首先检查系统情况,并对ip进行修改

其实,修改ip后的调整,也可以按照重新配置的方法进行,具体操作过程详见《oracle10g rac 表决盘损坏、ocr损坏处理

[root@dbrac1 bin]# cat /etc/hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               dbrac1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
#pubip
192.168.104.151         dbrac1
192.168.104.153         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
192.168.104.152         virt1
192.168.104.154         virt2

以上是原来的ip地址

要修改成如下ip地址:

#pubip
10.10.10.21         dbrac1
10.10.10.23         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
10.10.10.22         virt1
10.10.10.24         virt2

2、首先停止集群服务

–停数据库

[oracle@dbrac1 bin]$./srvctl stop database -d dbrac -o immediate
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac2
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac2

–停crs服务
[root@dbrac1 bin]#./crsctl stop crs
[root@dbrac2 bin]#./crsctl stop crs
两个节点都停

3、修改ip地址

修改ip地址:
[root@dbrac1 bin]# vi /etc/hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               dbrac1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

#pubip
10.10.10.21         dbrac1
10.10.10.23         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
10.10.10.22         virt1
10.10.10.24         virt2

所以,修改pulic,首先要修改hosts,改成相应的ip地址,这一步,两个节点都要做!

–编辑网卡文件
[root@dbrac1 bin]# vi /etc/sysconfig/network-scripts/ifcfg-eth0    –eth0是public网卡,eth1是私网卡,都要对照编写好!

这一步要注意,两个节点都要做,ip要编写正确。

–重启网卡服务
[root@dbrac1 bin]# service network restart

基本上的更改工作就结束了

4、配置集群连接配置

[root@dbrac1 bin]#./crsctl start crs

[root@dbrac1 bin]# ./oifcfg getif

[root@dbrac1 bin]#./oifcfg delif -global eth0
[root@dbrac1 bin]#./oifcfg setif -global eth0/10.10.10.0:public

如果调整了virtual ip,则要调整私网连接

[root@dbrac1 bin]#./oifcfg delif -global eth1
[root@dbrac1 bin]#./oifcfg setif -global eth1/10.10.1.0:cluster_interconnect
两个节点都要变更,如果网段没有变化,则可以不用这一步!在本例中,进行了修改,所以vip也需要调整

–执行vip的调整
[oracle@dbrac1 bin]$./srvctl stop database -d dbrac -o immediate
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac2
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac2

[root@dbrac1 bin]#./crsctl stop crs
[root@dbrac2 bin]#./crsctl stop crs

用oracle进行这项操作

[oracle@dbrac1 bin]$./srvctl config nodeapps -n dbrac1 -a

注意是两个节点

[root@dbrac1 bin]# ./srvctl modify nodeapps -n dbrac1 -A 10.10.10.22/255.255.255.0/eth0
[root@dbrac2 bin]# ./srvctl modify nodeapps -n dbrac2 -A 10.10.10.24/255.255.255.0/eth0

这时,如果监听里面记录的是ip地址,要进行修改!

到这时,就可以启crs

[root@dbrac2 bin]# ./crsctl start crs
[root@dbrac1 bin]# ./crsctl start crs

更改成功,顺利启动!

想要在OpenStack这个热闹的大集市里招揽生意

作为一个高尚的流浪者
想要在OpenStack这个热闹的大集市里招揽生意
除了吸引眼球的卖力吆喝
能留住人心的永远是
从中赋予的绝佳体验

巴塞罗那的La Rambla大街被称为“流浪者大街”,其本身就是一出永远也演不完的戏。

用余秋雨的话说:“这里浑然融合,主客不分。由于时时流动,这里形不成地盘,构不成统制,更不会出现兼并和垄断。” 不知什么时候形成的规范,在这里出现的一切,必须干净、文雅,不涉恶浊,不重招徕。

这样的一处所在,让人们懂得——真正的流浪者是高尚的。而正是这样的一种情怀,吸引到OpenStack 峰会(OpenStack Summit)最新的目光。

当OpenStack基金会COO Mark Collier在巴塞罗那的国际会展中心(CCIB)里说出第一句“welcome”时。我眼前恍惚的却是La Rambla大街与地中海衔接处那个哥伦布雕像的身影。云在他身边飘荡,他全然不理,只抬头放眼,注视远方。远方尽是地中海的浩荡碧波,他的目光全然穿越地中海,锐利而又渺茫。