自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 2025,每天10分钟,跟我学K8S(四十)- Helm (三)- 创建一个自己的helm应用

前面讲解了很多helm的知识点,今天创建一个自己的helm案例,在实操中进一步熟悉helm的使用。是我在工作中经常用的到一个网站,它可以显示返回用户的IP等一系列主机头想要的信息。官方也很贴心的制作了镜像,方便我们在本地使用,本次将用它为例,通过helm创建一个本地的httpbin的pod。

2025-04-08 20:22:17 144

原创 2025,每天10分钟,跟我学K8S(三十九)- Helm (二)Helm的结构和案例

前面一章,大概了解了下helm的安装,和创建自定义的应用,本章节,来完整演示一下通过helm安装一个mysql应用的方式,了解一下helm的目录结构及作用。

2025-04-08 16:55:21 448

原创 2025,每天10分钟,跟我学K8S(三十八)- Helm (一)什么是Helm

Helm 是 Kubernetes 生态中的核心包管理工具,旨在简化应用的打包、部署和生命周期管理。

2025-04-03 14:50:04 1241

原创 2025,每天10分钟,跟我学K8S(三十七)- RBAC

我们在前面的章节,讲解了许多K8S中的对象,例如Pods、ConfigMaps、Deployments、Nodes、Secrets、Namespaces等,那如何对他们进行权限管理呢?假设我们有一个名为 zhangsan 的用户,想相对这些资源拥有权限,首先想到的就是针对每个资源针对用户进行赋权,例如create、get、delete、list、update、edit、watch、exec各种权限,那这时候又来了一个 lisi 的用户,需要想同的权限,那上述操作是不是需要再重复一次。有没有更简单的方法?

2025-04-02 18:35:44 1088

原创 2025,每天10分钟,跟我学K8S(三十六)- 对象属性 - Volume - Secret

上节课学习了,了解了这个资源对象是当中非常重要的一个对象,一般情况下是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用就不适合了,因为是明文存储的,如果需要加密存储,就需要用到另外一个资源对象了:,用来保存敏感信息,例如密码、API 密钥、TLS 证书等等,将这些信息放在中比放在的定义中或者镜像中来说更加安全和灵活。 Secret 是 Kubernetes 中用于管理敏感信息(如密码、API 密钥、TLS 证书等)的核心资源。其设计目标是避免敏感数据硬编码到 P

2025-04-02 12:03:24 914

原创 2025,每天10分钟,跟我学K8S(三十五)- 对象属性 - Volume - ConfigMap

上面举例了ConfigMap 3种注入的方式,具体采用哪一种可以根据项目需求而定。

2025-03-31 19:21:45 764

原创 2025,每天10分钟,跟我学K8S(三十四)- 对象属性 - Volume - Longhorn

在安装了longhorn之后,我们就不需要关心底层实现是什么和实现的过程,只需要创建pvc+pod开箱即用,大大方便我们再k8s中使用存储。1.​抽象层级PV 是具体的存储资源实体,属于静态资源;StorageClass 是动态资源模板;Longhorn 是底层存储系统的实现。三者关系:StorageClass 动态生成 PV → PVC 绑定 PV → Longhorn 提供底层存储支持。2.运维复杂度PV 需手动维护,适合固定规模场景;StorageClass 通过自动化降低运维成本;

2025-03-31 14:58:01 568

原创 2025,每天10分钟,跟我学K8S(三十三)- 对象属性 - Volume - StorageClass

上一章节学习了K8S中PV/PVC,这种创建卷的方式给我们带来了不少好处,例如持久化,共享卷等,但是最大的问题就是它是静态的。什么意思?就是我们每次想使用一个卷的时候,先要创建pv,然后声明pvc,最后才能在pod里面去使用这个卷。少的情况下还好,万一生产环境里面有成1000个pod都需要用到卷存储,那岂不是要先创建1000个PV?删除pod后不是还要删除1000次PV?能不能省略掉创建和删除的步骤?这种情况下我们就需要用到动态 PV,也就是我们今天要讲解的 StorageClass。

2025-03-28 16:35:11 793

原创 2025,每天10分钟,跟我学K8S(三十二)- 对象属性 - Volume - PV PVC

前面我们讲解了 hostPath 或者 emptyDir 的方式来持久化数据,但是他们也有各自的缺点,是否有更加可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据?而且显示情况会出现存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes 便引入了 PV 和 PVC 两个重要的资源对象来实现对存储的管理。这也是本章节需要和大家讲解的核心:PV 和 PVC。

2025-03-27 16:15:35 721

原创 2025,每天10分钟,跟我学K8S(三十一)- 对象属性 - Volume - hostPath

顾名思义,就是将主机的目录挂载到pod里面,这样可以将pod里面产生的数据永久保留到主机的磁盘里面,也可以反过来将主机中的文件共享到pod中,例如可以将主机中的hosts文件挂载到多个pod,每次只需要修改主机的hosts文件即可。上面说的他的几个好处,坏处当然也是有不少,比如多个pod共享同一个hostpath,如果这些pod同时产生数据写入,有可能爆发数据冲突,同时pod产生的数据并不会随着pod删除而消失,会积累在主机的磁盘越来越大,浪费主机性能。

2025-03-27 13:45:08 357

原创 2025,每天10分钟,跟我学K8S(三十)- 对象属性 - Volume - emptyDir

顾名思义,是一个临时的存储卷,他是在k8s在pod调度到节点的时候自动创建的,生命周期随着pod的删除或转移而销毁,里面的数据也随之删除。一般用于非持久化的pod。默认存储在pod所在的node节点的。

2025-03-27 13:11:26 417

原创 2025,每天10分钟,跟我学K8S(二十九)- 对象属性 - Volume

前面讲解了那么多的案例,其实会发现一个问题,就是应用的数据存储,由于pod是无状态的,当pod销毁后,pod中产生的数据也随之销毁,那如果pod中运行的是持久化数据,例如数据库,在销毁或者重建pod的时候,该如何保留之前的数据。Kubernetes提供了一个思路----在Kubernetes(K8S)中,​是用于为Pod中的容器提供持久化存储或共享数据的核心机制。由于容器本身是临时性的,Volume的存在解决了数据持久化、容器间数据共享及配置管理等问题。

2025-03-27 11:28:09 729

原创 2025,每天10分钟,跟我学K8S(二十八)- 对象属性 - Pod Hook 如何优雅的关闭一个pod?

Pod Hook 是 Kubernetes 为容器提供的生命周期钩子,由 ​kubelet发起,用于在容器启动前或终止前执行特定操作。核心作用​环境初始化:如配置文件生成、资源预加载。​优雅终止:确保应用处理完现有请求后再关闭,避免数据丢失或服务中断。

2025-03-26 16:09:39 847

原创 2025,每天10分钟,跟我学K8S(二十七)- 对象属性 - 污点(Taint)

上一篇文章里面提了一个新的知识点:调度。默认情况下master节点是不调度普通pod的。我们上节课通过<kubectl taint xx > 这条命令让master节点允许被调度,即允许普通pod在master节点上创建。本章节来了解下K8S中的污点(Taint),

2025-03-26 14:47:41 1236

原创 2025,每天10分钟,跟我学K8S(二十七)- 对象属性 - 亲和性(Affinity)​ 和 ​反亲和性(Anti-Affinity)

上一章节了解了pod对node节点的选择,可以通过来进行选择节点进行部署,这一章节讲解另一种操作更精细化调度的属性:亲和性(Affinity)​ 和 ​反亲和性(Anti-Affinity)。在 Kubernetes 中,​亲和性(Affinity)​ 和 ​反亲和性(Anti-Affinity)​ 是控制 Pod 调度的核心机制,通过标签匹配实现资源的智能分布。

2025-03-26 11:38:38 1341

原创 2025,每天10分钟,跟我学K8S(二十六)- 对象属性 - 打标和nodeSelector

一个K8S集群一般的情况下会有多台服务器,例如master和多台node,我在生产环境中一般会将ETCD和api server等运行在master节点上,而业务服务的pod则运行在node服务器上面,那如何实现这种分配?常用的有两种思路,打标/nodeSelector 和 亲和性选择。在 Kubernetes 中,​标签(Labels)/nodeSelector​ 和 ​亲和性(Affinity)​ 是资源调度的核心机制,用于实现智能 Pod 分布和高可用性设计。

2025-03-25 18:03:33 373

原创 2025,每天10分钟,跟我学K8S(二十五)- 对象属性 - Health Check

在Kubernetes中,健康检查是确保集群中容器稳定运行的重要机制。它通过探针(Probe)定期检查容器的健康状态,并根据检查结果采取相应的措施。下面我将详细讲解Kubernetes中的健康检查机制。

2025-03-25 14:29:07 995

原创 2025,每天10分钟,跟我学K8S(二十四)- 对象属性 - Rolling Update

在Kubernetes中,‌‌ 是一种用于在不中断服务的情况下更新应用程序的策略。它通过逐步替换旧版本的Pods来实现无缝更新。举个例子,一个deployment中有10个nginx1.17版本的pod副本,当想将这个nginx版本进行升级到1.18,我们想的当然是不能所有pod一起更新,最好是能下线一部分,上线一部分,按照这样的轮询,直至将所有的pod更新完毕,以免影响pod的对外服务业务。

2025-03-25 13:50:51 667

原创 2025,每天10分钟,跟我学K8S(二十三)- 对象属性 - HPA

上一篇讲解了Pod的资源限制,那现实情况会出现,当业务流量上涨后,Pod对资源的占用也上涨了。之前分配的资源不够用了。不可能再又手动的去调整yaml文件,重新创建占用更多资源的pod吧?Kubernetes(Pod水平自动伸缩),简称HPA。HAP通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量,这是HPA最基本的原理。

2025-03-25 11:47:48 528

原创 2025,每天10分钟,跟我学K8S(二十二)- 对象属性 - resources资源限制

在生产环境和测试环境共用node节点的情况下,如果物理资源不够用,不可避免会出现抢占物理资源的情况,在Kubernetes中,‌‌ 指的是容器或Pod可以使用的计算资源,主要包括CPU和内存。Kubernetes通过资源请求(requests)和资源限制(limits)来管理这些资源。

2025-03-25 11:07:16 346

原创 2025,每天10分钟,跟我学K8S(二十一)- 对象属性 - namespace

在 ‌Kubernetes‌ 中,‌Namespace(命名空间)‌ 是一种将集群资源划分为多个逻辑组的机制。它主要用于在同一个 Kubernetes 集群中隔离不同项目、团队或环境(如开发、测试、生产)的资源,避免命名冲突,并简化权限和资源的管理。通过Namespace,可以将集群中的资源(如Pod、Service、Volume等)进行逻辑上的隔离,避免命名冲突和资源干扰。

2025-03-25 10:50:04 615

原创 2025,每天10分钟,跟我学K8S(二十)- Ingress

上篇文章介绍service时有说了暴露了service对外的三种方式ClusterIP、NodePort与LoadBalance,这几种方式都是在service的维度提供的,service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制,对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。但是,单独用service暴露服务的方式,在实际生产环境中不太合适:ClusterIP的方式只能在集群内部访问。

2025-03-20 17:51:46 588

原创 2025,每天10分钟,跟我学K8S(十九)- Service (二)

前面我们学习了K8S中service对象中ClusterIP和NodePort,今天来学习剩下的两种LoadBalancer和ExternalName。LoadBalancer: 大多是在公有云托管集群中使用。

2025-03-19 20:10:45 141

原创 2025,每天10分钟,跟我学K8S(十八)- Service (一)

Service是K8s中的一种抽象,它定义了一组Pod的逻辑集合,并为这组Pod提供一个稳定的访问点(Endpoint)。这个访问点可以是一个固定的虚拟IP地址或者一个DNS名称,通过这个访问点,其他的应用或服务可以方便地访问到这组Pod,实现服务发现和负载均衡。在K8s中,Pod是最小的可部署单元,而Service则提供了对这些Pod的抽象。使用Service,我们可以将后端Pod组织成一个逻辑单元,而不用担心它们的具体部署细节。这种抽象使得我们可以更加灵活地进行应用的扩展和维护。

2025-03-18 17:00:36 986

原创 2025,每天10分钟,跟我学K8S(十七)- CronJob

如果想要删除当前 Namespace 中的所有 Job,可以通过命令 kubectl delete jobs --all 立刻删除它们。的基础上加上了时间调度,在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。如果设置限制的值为 0,那么相关类型的。字段是Crontab的必须字段,用来指定任务运行的周期,格式就和liunx中的。,表示历史限制,是可选的字段。文件中的一行,它根据配置的时间格式周期性地运行一个。用来指定需要运行的任务,格式当然和。,默认没有限制,所有成功和失败的。

2025-03-18 15:45:50 286

原创 2025,每天10分钟,跟我学K8S(十六)- Job

Job是Kubernetes中的一个核心概念,用于在集群中运行独立的任务。与其他控制器(如ReplicaSet和Deployment)不同,Job关注的是执行一次性任务而不是保持指定数量的实例运行。

2025-03-18 15:33:44 249

原创 2025,每天10分钟,跟我学K8S(十五)- DaemonSet

DaemonSet用于确保在集群的每个节点上都运行一个或多个Pod的副本。与其他控制器(如statefulset和deployment)不同,DaemonSet主要用于在整个集群中的节点上运行系统级别的任务,如日志收集、监控代理等。

2025-03-13 17:03:46 166

原创 2025,每天10分钟,跟我学K8S(十四)- StatefulSet

举例,有2个pod程序,其中一个是web服务,一个是是mysql服务,web需要去连接mysql进行数据查询,那么就得在web服务中写好mysql的IP地址,但是如果mysql的pod被重建了,IP就发生改变了。如果web是通过主机名去连接mysql,同时这个mysql即便重建主机名也不发生改变,岂不美哉?上一章节,初步通过Deployment和ReplicaSet了解到了他们对Pod的管理方式,但是这里有一个问题,pod的名字都是无序的随机生成无状态服务,我们又知道同pod之间是可以互相访问的。

2025-03-13 16:22:03 303

原创 2025,每天10分钟,跟我学K8S(十三)- ReplicaSet

上节课讲述Deployment的时候引入了一个ReplicaSet的东西,也讲解了他是来管理pod的的创建和删除。并且保证pod的数量和我们设置的参数保持一致。本章节来了解下他如何来工作的。

2025-03-13 12:27:57 61

原创 2025,每天10分钟,跟我学K8S(十二)- Deployment

前面2个章节,了解了pod的创建过程和生命周期。但是在实际应用中,直接创建pod是很少见的,因为一旦这个pod挂掉了。整个服务就宕机了。所以 kubernetes 提供了一个Deployment的概念,可以让Deployment来管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本一直可用的,不会因为一个 POD 挂掉导致整个服务挂掉。Deployment‌是Kubernetes中的一个核心概念,它是一种高级别的控制器,用于管理Pod和ReplicaSet,确保应用程序的高可用性和稳定性。

2025-03-13 12:09:22 533

原创 2025,每天10分钟,跟我学K8S(十一)- POD的生命周期

上节课我们创建了一个pod,成功启动了他。本章节我们来继续了解一下创建pod的其他功能。上节课在第一次拉取镜像的时候,出现了一个报错,如果继续等待,可能会变成,在调整了镜像地址重新拉取之后,状态又变成了Running,这告诉我们,在创建Pod的时候,是有多种状态的。这就叫做pod的生命周期。

2025-03-11 14:34:41 290

原创 2025,每天10分钟,跟我学K8S(十)- POD讲解 (一)

上节课我们学习了YAML的语法,这节课我们来用YAML语法来实际创建一个pod对象,来加深对YAML和POD的理解。首先,先了解下什么是POD?Kubernetes中的Pod是最小调度单元,包含一个或多个共享网络和存储资源的容器。这些容器始终共同调度,通过localhost直接通信,并作为整体进行管理。从下图可以分析出,K8S只管理到POD层级,POD里面又包含了contained、docker等底层容器,但是这就不属于K8S的管理范畴。

2025-03-11 12:04:31 720

原创 2025,每天10分钟,跟我学K8S(九)- YAML讲解

在了解K8S的时候,一定看过一句话 "Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。" 那么怎么去理解这句话呢?

2025-03-10 17:03:40 552

原创 2025,每天10分钟,跟我学K8S(八)- 网络组件Calico

上一篇我们部署了Flannel网络,并且所有的节点状态已经发现了改变,这一篇我们来了解下另外一个网络插件:Calico。在安装calico之前,为了避免2个网络插件的冲突,先卸载掉刚才安装的flannel组件。

2025-03-10 16:52:16 143

原创 2025,每天10分钟,跟我学K8S(七)- 网络组件Flannel

上一篇了解了K8S中有许多的网络组件,Flannel是其中之一,本章节将来学习如何部署。

2025-03-10 14:47:37 144

原创 2025,每天10分钟,跟我学K8S(六)- 网络组件的选择

CNI 是由 CoreOS 提出的一个容器网络规范。已采纳改规范的包括 Apache Mesos, Cloud Foundry, Kubernetes, Kurma 和 rkt。另外 Contiv Networking, Project Calico 和 Weave 这些项目也为 CNI 提供插件。CNI 对外暴露了从一个网络里面添加和剔除容器的接口。CNI 使用一个 json 配置文件保存网络配置信息。和 CNM 不一样,CNI 不需要一个额外的分布式存储引擎。

2025-03-10 13:57:47 980

原创 2025,每天10分钟,跟我学K8S(五)- 搭建k8s(下)

上一篇我们讲解了k8s集群中的master的安装,在本章中我们将加入node节点和安装网络组件。

2025-03-03 23:04:20 918

原创 2025,每天10分钟,跟我学K8S(四)- 搭建k8s(上)

本文初期将使用2台服务器作为k8s集群的节点,资源情况如下,免费服务器来源可以查看第二篇文章。使用kubeadm来搭建属于自己的第一套k8s集群(截止2025年3月,k8s最新版本为1.32.2)

2025-03-03 17:02:58 947

原创 2025,每天10分钟,跟我学K8S(三)- k8s 重要概念

在此之前,已经实际操作了一下真实的K8S环境,但是很多名词和操作都不知道到底是什么东西。所以必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石。下图来自官网,为k8s的一个集群组件概括Kubernetes 集群由控制平面和一个或多个工作节点组成。

2025-03-03 16:21:53 704

原创 2025,每天10分钟,跟我学K8S(二)- 试玩K8S(下)

① k8s中默认创建pod的命令,创建一个为nginx的pod,使用的镜像和版本为后面的华为云地址②kubectl get pod k8s中最常用的命令,用来看创建的pod状态通过 kubectl get pod 命令,可以获知,刚才创建的nginx运行状态为Running,并且重启次数为0,有且只有一个pod在运行。

2025-03-03 15:56:45 12

Oracle静默安装.doc

1). 查看Linux版本 [root@lym oracle]# cat /etc/issue Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel \r on an \m 2). 查看内核版本 [root@lym oracle]# uname -a Linux lym.oracle.com 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux 3). 检测及安装需要安装的系统软件包 [root@lym Server]# rpm -ivh glibc-headers-2.5-12.i386.rpm [root@lym Server]# rpm -ivh glibc-devel-2.5-12.i386.rpm [root@lym Server]# rpm -ivh libgomp-4.1.1-52.el5.i386.rpm [root@lym Server]# rpm -ivh gcc-4.1.1-52.el5.i386.rpm [root@lym Server]# rpm -ivh libstdc++-devel-4.1.1-52.el5.i386.rpm [root@lym Server]# rpm -ivh gcc-c++-4.1.1-52.el5.i386.rpm [root@lym Server]# rpm -ivh make-3.81-1.1.i386.rpm [root@lym Server]# rpm -ivh libXp-1.0.0-8.i386.rpm [root@lym Server]# rpm -ivh openmotif-2.3.0-0.3.el5.i386.rpm [root@lym Server]# rpm -ivh setarch-2.0-1.1.i386.rpm [root@lym Server]# rpm -ivh compat-db-4.2.52-5.1.i386.rpm [root@lym Server]# rpm -ivh compat-gcc-34-3.4.6-4.i386.rpm [root@lym Server]# rpm -ivh compat-gcc-34-c++-3.4.6-4.i386.rpm [root@lym Server]# rpm -ivh compat-libstdc++-33-3.2.3-61.i386.rpm ///////////////////////////////////////////////////////////////////// ---- Step 4 配置内核及其他参数 1). vi /etc/sysctl.conf --加入以下11行代码(并将原来的# kernel.shmmax和kernel.shmall这两行参数屏蔽) kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144 2). 执行以下命令使以上参数修改生效 [root@lym Server]# /sbin/sysctl -p 3). vi /etc/security/limits.conf --加入以下四行代码 * soft nproc 2047 * hard nproc 16384 * soft nofile 1024 * hard nofile 65536 4). vi /etc/pam.d/login --加入下面一行代码 session required /lib/security/pam_limits.so 5). vi /etc/selinux/config --(禁用SELINUX,安装完后可再还原成原值) 将SELINUX设置为 SELINUX=disabled //////////////////////////////////////////////////////////// ---- Step 5. 添加用户组和用户,并为oracle用户设置密码 [root@lym Server]# groupadd oinstall [root@lym Server]# groupadd dba [root@lym Server]# groupadd oper [root@lym Server]# useradd -g oinstall -G dba oracle [root@lym Server]# passwd oracle Changing password for user oracle. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. ///////////////////////////////////////////////////////////// ---- Step 6. 创建安装Oracle的文件夹,并设置其相应权限给Oracle用户。 [root@lym Server]# mkdir -p /u01/app/oracle/product/10.2.0/db_1 [root@lym Server]# chown -R oracle.oinstall /u01 [root@lym Server]# chmod 775 /u01 ///////////////////////////////////////////////////////////// ---- Step 7. 伪装操作系统版本,使安装Oracle时,通过操作系统验证。 vi /etc/redhat-release --(可保存此文件的副本在某位置,以便安装完成后,复原此文件) --将这文件中的内容( Red Hat Enterprise Linux Server release 5 (Tikanga) ) 替换为如下代码: redhat-4 ///////////////////////////////////////////////////////////// ---- Step 8. Oracle 10g 默认不支持中文 安装时将 /etc/sysconfig/i18n 中的 LANG改为 en 即可 ///////////////////////////////////////////////////////////// ---- Step 9. 设置Oracle环境变量(可根据你的需要作适当更改) [root@lym Server]# vi /home/oracle/.bash_profile --加入内容如下 # Oracle Settings TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME ORACLE_SID=TSH1; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi //////////////////////////////////////////////////////////// ---- Step 10. 注销root用户,并登录oracle用户,在/home/oracle目录下建立一个名为enterprise01.rsp的文件, 里面的具体内容如下(参考/oracle/database/response目录下面的enterprise.rsp文件, 该目录下有三个文件enterprise.rsp(企业版静默安装文件),standard.rsp(标准版静默安装文件) 和custom.rsp(客户版静默安装文件),另外还有其他三个静默安装文件)。 RESPONSEFILE_VERSION=2.2.1.0.0 FROM_LOCATION="../stage/products.xml" ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_1/" ORACLE_HOME_NAME="OraDb10g_home1" TOPLEVEL_COMPONENT={"oracle.server","10.2.0.1.0"} DEINSTALL_LIST={"oracle.server","10.2.0.1.0"} SHOW_SPLASH_SCREEN=false SHOW_WELCOME_PAGE=false SHOW_COMPONENT_LOCATIONS_PAGE=false SHOW_CUSTOM_TREE_PAGE=false SHOW_SUMMARY_PAGE=false SHOW_INSTALL_PROGRESS_PAGE=false SHOW_REQUIRED_CONFIG_TOOL_PAGE=false SHOW_CONFIG_TOOL_PAGE=false SHOW_RELEASE_NOTES=false SHOW_ROOTSH_CONFIRMATION=false SHOW_END_SESSION_PAGE=false SHOW_EXIT_CONFIRMATION=false NEXT_SESSION=false NEXT_SESSION_ON_FAIL=false SHOW_DEINSTALL_CONFIRMATION=false SHOW_DEINSTALL_PROGRESS=false ACCEPT_LICENSE_AGREEMENT=true COMPONENT_LANGUAGES={"en"} CLUSTER_NODES= INSTALL_TYPE="EE" s_nameForDBAGrp=dba s_nameForOPERGrp=dba b_oneClick=false SHOW_DATABASE_CONFIGURATION_PAGE=false b_createStarterDB=false /////////////////////////////////////////////////////////////////// ---- Step 11. 开始安装 [oracle@lym ~]$ cd /oracle/database [oracle@lym database]$ ./runInstaller -silent -responseFile /home/oracle/enterprise01.rsp -------安装时终端输出类似如文件"安装过程中的终端显示2.txt"中的内容-------- -------请您耐心等待,可先去喝杯荼!--------- ////////////////////////////////////////////////////////////////// ---- Step 12. 以root用户运行安装后环境所需脚本(千万主意:要以root用户去执行这两个脚本,执行后一个脚本时,回车一下就可以了) [root@lym ~]# sh /u01/app/oracle/oraInventory/orainstRoot.sh [root@lym ~]# sh /u01/app/oracle/product/10.2.0/db_1/root.sh ---- Step 测试看能否进sqlplus---- [oracle@lym ~]$ sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 22 00:25:56 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> 至此Oracle的产品已经安装完成,可是目前为止我们还没有建立数据库。 由于没有X界面无法启动dbca ,所以不能用dbca来帮我们建立数据库。这时候你可能会想到用create database 语句来建立数据库, 可是语法实在是繁琐,并且还要运行许多的 oracle脚本 。 此时,我们可以利用oracle提供的种子数据库还原一个数据库出来(详细见以下操作) 假设我们要建立的数据库的名称为TSH1(这个名称跟你安装前设置的环境变量中的ORACLE_SID相一致)。 ----------------------------------------------------------------------------- ---------利用oracle提供的种子数据库还原一个数据库出来 的详细步骤--------------- /////////////////////////////////////////////////////////////////////////// ---- Step 1. 建立我们所需的目录,并刷新授权。 [root@lym Server]# mkdir -p /u01/app/oracle/admin/TSH1/{a,b,u}dump [root@lym Server]# mkdir -p /u01/app/oracle/oradata/TSH1 [root@lym Server]# chown -R oracle.oinstall /u01 [root@lym Server]# chmod 775 /u01 --你可以在oracle用户下,看刷新授权前后,权限的变化(比较如下)。 [oracle@lym oracle]$ ls -l --刷新授权前/uo1/oracle/oracle下面各文件的权限 total 16 drwxr-xr-x 3 root root 4096 May 22 06:24 admin drwxr-xr-x 3 root root 4096 May 22 06:25 oradata drwxr-xr-x 6 oracle oinstall 4096 May 22 06:19 oraInventory drwxr-xr-x 3 oracle oinstall 4096 May 22 06:08 product [oracle@lym oracle]$ ls -l ----刷新授权后/uo1/oracle/oracle下面各文件的权限 total 16 drwxr-xr-x 3 oracle oinstall 4096 May 22 06:24 admin drwxr-xr-x 3 oracle oinstall 4096 May 22 06:25 oradata drwxr-xr-x 6 oracle oinstall 4096 May 22 06:19 oraInventory drwxr-xr-x 3 oracle oinstall 4096 May 22 06:08 product ///////////////////////////////////////////////////////////////////////////// ---- Step 2. 找到oracle为种子数据库提供的控制文件并copy至/u01/app/oracle/oradata/TSH1目录下(在Oracle用户下操作)。 [oracle@lym oracle]$ cd /u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates/ [oracle@lym templates]$ cp Seed_Database.ctl /u01/app/oracle/oradata/TSH1 //////////////////////////////////////////////////////////////////////////// ---- Step 3. 建立pfile文件(在Oracle用户下操作)。 [oracle@lym templates]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs [oracle@lym templates]$ vi initTSH1.ora --输入以下三行并保存退出 *.db_name=SEEDDATA control_files='/u01/app/oracle/oradata/TSH1/Seed_Database.ctl' compatible=10.2.0.1.0 ----注:因为Seed_Database.ctl控制文件中记录的db_name为SEEDDATA,所以第一行的设置如此。 ///////////////////////////////////////////////////////////////////////////// ---- Step 4. 启动数据库到mount状态,并使用默认的参数建立spfile文件;然后重新启动数据库并更改sga_max_size,sga_target参数的值;然后再次重新启动数据库(具体操作如下)。 [oracle@lym dbs]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 22 06:56:19 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to an idle instance. SQL> startup mount ORACLE instance started. Total System Global Area 113246208 bytes Fixed Size 1218004 bytes Variable Size 58722860 bytes Database Buffers 50331648 bytes Redo Buffers 2973696 bytes Database mounted. SQL> create spfile from pfile; File created. SQL> shutdown immediate ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 113246208 bytes Fixed Size 1218004 bytes Variable Size 58722860 bytes Database Buffers 50331648 bytes Redo Buffers 2973696 bytes Database mounted. SQL> alter system set sga_max_size=200M scope=spfile; System altered. SQL> alter system set sga_target=160M scope=spfile; System altered. SQL> shutdown immediate ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 209715200 bytes Fixed Size 1218580 bytes Variable Size 100665324 bytes Database Buffers 104857600 bytes Redo Buffers 2973696 bytes Database mounted. SQL> /////////////////////////////////////////////////////////////////////////// ---- Step 5. 用rman连接数据库 [oracle@lym ~]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Thu May 22 07:22:51 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: SEEDDATA (DBID=3891038516, not open) RMAN> list backup; using target database control file instead of recovery catalog List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------- 1 Full 89.23M DISK 00:00:36 30-JUN-05 BP Key: 1 Status: AVAILABLE Compressed: YES Tag: Piece Name: /ade/aime_10.2_lnx_push/oracle/oradata/Seed_Database.dfb List of Datafiles in backup set 1 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- --------- ---- 1 Full 446074 30-JUN-05 /ade/aime_10.2_lnx_push/oracle/oradata/seeddata/system01.dbf 2 Full 446074 30-JUN-05 /ade/aime_10.2_lnx_push/oracle/oradata/seeddata/undotbs01.dbf 3 Full 446074 30-JUN-05 /ade/aime_10.2_lnx_push/oracle/oradata/seeddata/sysaux01.dbf 4 Full 446074 30-JUN-05 /ade/aime_10.2_lnx_push/oracle/oradata/seeddata/users01.dbf RMAN> ----可以看到,我们可以利用/ade/aime_10.2_lnx_push/oracle/oradata/Seed_Database.dfb这个备份集来还原数据库。 但是很明显我们系统中并没有这样一个文件/ade/aime_10.2_lnx_push/oracle/oradata/Seed_Database.dfb , 但是查找发现路径/u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates下有 Seed_Database.dfb文件 。 ----此明有两种方法解决此问题,一个是建立一个软链接/ade/aime_10.2_lnx_push/oracle/oradata/Seed_Database.dfb 指向 /u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb 。 另一个是创建目录/ade/aime_10.2_lnx_push/oracle/oradata/ 并将Seed_Database.dfb copy至其下 。 -- 这里,我们使用第二种方法(具体操作如下): [root@lym ~]# mkdir -p /ade/aime_10.2_lnx_push/oracle/oradata/ [root@lym ~]# chown -R oracle.oinstall /ade [root@lym ~]# chmod 775 /ade [root@lym ~]# su - oracle [oracle@lym ~]$ cd /u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates [oracle@lym templates]$ cp Seed_Database.dfb /ade/aime_10.2_lnx_push/oracle/oradata/ [oracle@lym templates]$ //////////////////////////////////////////////////////////////////////////// ---- Step 6. 还原数据库(先在RMAN下执行如下命令) run { set newname for datafile '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/system01.dbf' to '/u01/app/oracle/oradata/TSH1/system01.dbf'; set newname for datafile '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/sysaux01.dbf' to '/u01/app/oracle/oradata/TSH1/sysaux01.dbf'; set newname for datafile '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/undotbs01.dbf' to '/u01/app/oracle/oradata/TSH1/undotbs01.dbf'; set newname for datafile '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/users01.dbf' to '/u01/app/oracle/oradata/TSH1/users01.dbf'; restore database; switch datafile all; } -- 然后,执行如下命令可以看到我们所需要的数据文件都还原回来了,但是现在还缺少log file 。 我们现在打开数据库。 [oracle@lym templates]$ cd /u01/app/oracle/oradata/TSH1 [oracle@lym TSH1]$ ls Seed_Database.ctl sysaux01.dbf system01.dbf undotbs01.dbf users01.dbf [oracle@lym TSH1]$ -- 因为控制文件中记录的log file路径为 /ade/aime_10.2_lnx_push/oracle/oradata/seeddata 所以要先创建相应的目录并再次刷新其权限(具体操作如下)。 [root@lym ~]# mkdir -p /ade/aime_10.2_lnx_push/oracle/oradata/seeddata [root@lym ~]# chown -R oracle.oinstall /ade [root@lym ~]# chmod 775 /ade -- 然后在sqlplus中执行如下命令: [oracle@lym TSH1]$ sqlplus / as sysdba SQL> alter database open resetlogs; Database altered. SQL> -- 此时,在目录/ade/aime_10.2_lnx_push/oracle/oradata/seeddata 下创建了redo01.log,redo02.log,redo03.log,temp01.dbf文件。 -- 我们要更改这几个文件的路径,所以先将数据库关闭, 然后cp /ade/aime_10.2_lnx_push/oracle/oradata/seeddata/× /u01/app/oracle/oradata/orcl/ 启动数据库到mount状态,并更改日志和临时文件的路径(具体操作如下) SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> [oracle@lym ~]$ cd /ade/aime_10.2_lnx_push/oracle/oradata/seeddata [oracle@lym seeddata]$ cp redo01.log redo02.log redo03.log temp01.dbf /u01/app/oracle/oradata/TSH1/ -- 然后启动数据库到mount状态,并更改日志和临时文件的路径 SQL> startup mount; ORACLE instance started. Total System Global Area 209715200 bytes Fixed Size 1218580 bytes Variable Size 104859628 bytes Database Buffers 100663296 bytes Redo Buffers 2973696 bytes Database mounted. SQL> alter database rename file '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/redo01.log' to '/u01/app/oracle/oradata/TSH1/redo01.log'; Database altered. SQL> alter database rename file '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/redo02.log' to '/u01/app/oracle/oradata/TSH1/redo02.log'; Database altered. SQL> alter database rename file '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/redo03.log' to '/u01/app/oracle/oradata/TSH1/redo03.log'; Database altered. SQL> alter database rename file '/ade/aime_10.2_lnx_push/oracle/oradata/seeddata/temp01.dbf' to '/u01/app/oracle/oradata/TSH1/temp01.dbf'; Database altered. SQL> alter database open; Database altered. SQL> -- 到此数据库已经建立,并且数据文件也放到了我们期待的地方。但是还有一个问题,就是数据库名称不是我们事先期待的。 SQL> show parameter name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string SEEDDATA db_unique_name string SEEDDATA global_names boolean FALSE instance_name string TSH1 lock_name_space string log_file_name_convert string service_names string SEEDDATA SQL> //////////////////////////////////////////////////////////////////////// 下面我们将数据库名称SEEDDATA改成我们需要的TSH1 。注意此时仅仅更改参数文件的值是不行的,因为控制文件中同样也记录着数据库的名称。 -- Step 7. 更改数据库名称 -- 首先备份控制文件脚本(具体操作如下) SQL> alter database backup controlfile to trace as '/tmp/ctl.txt'; Database altered. SQL> create pfile from spfile; File created. SQL> -- 然后将spfile文件(spfileTSH1.ora)删除,编辑pfile文件(initTSH1.ora)将db_name="SEEDDATA" 改成 db_name="TSH1"(具体操作如下)。 [oracle@lym dbs]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs [oracle@lym dbs]$ rm spfileTSH1.ora [oracle@lym dbs]$ vi initTSH1.ora -- 然后保存对initTSH1.ora的修改并退出。 -- 然后vi /home/oracle/ctl2.txt(参考/tmp/ctl.txt重建控制文件脚本),脚本的内容如下: CREATE CONTROLFILE REUSE DATABASE "SEEDDATA" set database "TSH1" RESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/TSH1/redo01.log' SIZE 50M, GROUP 2 '/u01/app/oracle/oradata/TSH1/redo02.log' SIZE 50M, GROUP 3 '/u01/app/oracle/oradata/TSH1/redo03.log' SIZE 50M DATAFILE '/u01/app/oracle/oradata/TSH1/system01.dbf', '/u01/app/oracle/oradata/TSH1/undotbs01.dbf', '/u01/app/oracle/oradata/TSH1/sysaux01.dbf', '/u01/app/oracle/oradata/TSH1/users01.dbf', '/u01/app/oracle/oradata/TSH1/tt.dbf' CHARACTER SET US7ASCII ;

2015-06-19

centos7_64位安装oracle11g

centos7_64位安装oracle11g | 静默安装oracle11 |centos7安装oracle11g

2015-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除