ceshi

简介:

第1章 ASM

1
select  from  dual;

- 3 -

1.1 简介- 3 -

1.1.1 ASMLib- 3 -

1.1.2 什么是 udev- 4 -

1.1.3 Why ASMLIB and why not?- 4 -

1.2 在 RHEL 6.4 上安装 Oracle 11gR2 + ASM --使用udev- 6 -

1.2.1 检查硬件- 6 -

1.2.2 安装软件包检查- 8 -

1.2.3 修改主机名- 13 -

1.2.4 网络配置- 13 -

1.2.5 磁盘准备- 13 -

1.2.5.1 添加磁盘- 14 -

1.2.5.2 对磁盘进行分区- 20 -

1.2.6 配置目录、用户等- 22 -

1.2.6.1 配置用户及用户组- 22 -

1.2.6.2 创建目录并且配置 grid 和 oracle 用户的配置文件- 23 -

1.2.7 使用udev管理磁盘- 23 -

1.2.7.1 配置 udev 绑定的 scsi_id- 23 -

1.2.7.2 创建并配置 udev rules 文件- 25 -

1.2.7.3 添加完成后,重启 udev,不同 Linux 发行版本重启方式不一样。- 26 -

1.2.7.4 查看绑定的 asm,如果此时还是看不到 asm disk,请重启操作系统后再查看。- 26 -

1.2.8 系统内核参数修改- 27 -

1.2.8.1 编辑 /etc/security/limits.conf 文件,在文件尾部添加如下内容:- 27 -

1.2.8.2 编辑 /etc/pam.d/login 文件,在文件尾部添加如下内容:- 28 -

1.2.8.3 编辑 /etc/profile 文件,设置 shell 限制,在文件尾部添加如下内容:- 28 -

1.2.8.4 /etc/sysctl.conf- 28 -

1.2.9 为 Linux 系统配置本地 YUM - 29 -

1.2.10 安装grid- 31 -

1.2.10.1 通过 ZMODEM 上传文件 linux.x64_11gR2_grid.zip grid用户家目录 /home/grid/- 31 -

1.2.10.2 解压文件- 32 -

1.2.10.3 作为 grid 用户登录系统,执行安装程序。- 33 -

一、 日志- 33 -

二、 最后的执行脚本步骤- 46 -

三、 11.2.0.3.0 root脚本- 56 -

1.2.10.4 利用asmca创建磁盘组- 57 -

1.2.11 使用netmgr建立监听- 66 -

1.2.11.1 通过 grid 用户执行 crs_stat -t 检查 ASM 是否安装好,如下所示表示搭建 OK- 66 -

1.2.12 开始搭建 Oracle 数据库- 67 -

1.2.12.1 检查 $ORACLE_HOME/bin/oracle文件的所属组- 81 -

1.2.13 使用 netmgr 建立监听--Oracle用户不需要创建- 82 -

1.2.14 使用 dbca 创建数据库- 88 -

1.2.14.1 关闭防火墙--不然客户端可能连接不上- 105 -

1.2.14.2 是否有tnsnames.ora 生成- 105 -

1.2.15 配置ORACLE自动启动- 105 -

1.2.15.1 编辑/etc/oratab- 105 -

1.2.15.2 ROOT用户创建/etc/init.d/dbora- 105 -

1.2.15.3 加入启动项- 106 -

1.2.16 验证- 107 -

1.3 启动crs- 112 -

1.4 报错:- 113 -

1.4.1 Oracle 11gR2 RAC ohasd failed to start 解决方法- 113 -

1.4.2 CRS-4639: Could not contact Oracle High Availability Services- 114 -

1.4.3 ORA-29701: unable to connect to Cluster Synchronization Service- 117 -

1.4.4 asm 实例无法加载diskgroupsORA-15110: no diskgroups mounted- 120 -

1.4.5 在启动DB时报错ORA-27154 ORA-27300 ORA-27301 ORA-27302- 123 -

1.4.6 ORA-29786: SIHA attribute GET failed- 125 -

1.4.7 11gR2手动创建ASM实例ORA-29786错误解决方法- 128 -

1.4.8 ORACLE dbca 找不到asm disks 2012-04-11 14:44:03- 135 -

1.4.9 ora-15077ASM磁盘组不能挂载- 142 -

1.5 创建ASM实例(下面基于VMware + RHEL 5.4 + Oracle 10g R2演示)- 145 -

第2章 利用udev服务解决rac_asm存储设备名- 152 -

第3章 使用 udev 高效、动态地管理 Linux 设备文件- 155 -

3.1 概述:- 155 -

3.2 udev 简介- 155 -

3.2.1 什么是 udev?- 155 -

3.2.2 使用 udev 的好处:- 156 -

3.2.3 相关术语:- 157 -

3.3 如何配置和使用 udev- 158 -

3.3.1 下载和安装 udev- 158 -

3.3.2 udev 的配置文件 (/etc/udev/udev.conf)- 159 -

3.3.3 通过 udev 设定设备文件的权限- 161 -

3.3.4 其他常用的 udev 命令:- 170 -

第4章 Oracle数据库高可用之Oracle Restart详细安装图文教程- 179 -

第5章 Oracle Enterprise Linux6.3下安装Oracle11g Grid ASM- 238 -

5.1 查看版本信息- 238 -

5.2 添加Oracle用户- 238 -

5.3 添加Oracle用户组- 238 -

5.4 修改Oracle用户所属组- 239 -

5.5 设置密码- 239 -

5.6 创建目录- 239 -

5.7 解压缩安装文件- 239 -

5.8 设置目录所有者- 239 -

5.9 更改文件权限- 239 -

5.10 查看安装的包- 240 -

5.11 安装缺少的包- 240 -

5.12 修改系统用户资源权限- 240 -

5.13 设置内核参数- 241 -

5.13.1 修改- 241 -

5.13.2 查看内核参数- 241 -

5.13.3 使内核参数生效- 241 -

5.14 修改oracle 用户shell 限制- 241 -

5.15 oracle用户限制,登录- 242 -

5.16 设置磁盘配置策略- 242 -

5.17 重新启动系统- 242 -

5.18 Oracle asm设置- 242 -

5.18.1 下载oracle asm安装文件- 242 -

5.18.2 安装- 242 -

5.18.3 oracleasm配置- 242 -

5.18.4 通过vmware增加磁盘- 243 -

5.18.5 创建分区- 243 -

5.18.6 创建asm- 244 -

5.18.7 查看oracleasm日志- 244 -

5.19 配置ip地址和主机名- 244 -

5.20 配置grid用户环境变量- 245 -

5.21 安装grid- 245 -

5.21.1 切换到root- 245 -

5.21.2 设置当前运行环境变量- 245 -

5.21.3 执行安装- 245 -

5.21.4 设置口令- 246 -

5.21.5 执行- 246 -

5.21.6 安装成功验证- 247 -

5.21.7 安装日志查看- 247 -

第6章 Oracle 11gR2 for Linux 安装- 247 -

第7章 ASM安装和配置- 274 -

第8章 重新配置与卸载 11gR2 Grid Infrastructure- 290 -

附录一:系统附加安装包- 297 -

 

第一章 ASM安装

一.1  简介

一.1.1  ASMLib

Red Hat Enterprise Linux (RHEL)6以前,Oracle均是使用ASMLib这个内核支持库配置ASM

ASMLIB是一种基于Linux module,专门为Oracle Automatic Storage Management特性设计的内核

支持库(kernel support library)

但是,在20115月,甲骨文发表了一份Oracle数据库ASMLib的声明,声明中称甲骨文将不再

提供Red Hat Enterprise Linux (RHEL)6ASMLib和相关更新。

甲骨文在这份声明中表示,ASMLib更新将通过Unbreakable Linux Network (ULN)来发布,并仅对

Oracle Linux客户开放。ULN虽然为甲骨文和红帽的客户服务,但如果客户想要使用ASMlib,就

必须使用Oraclekernel来替换掉红帽的。

这份声明详见Oracle Metalink文档

Oracle ASMLib Software Update Policy for Red Hat Enterprise Linux Supported by Red Hat [ID 

1089399.1]

Software Update Policy for ASMLib running on future releases of Red Hat Enterprise Linux

Red Hat Enterprise Linux 6 (RHEL6)

For RHEL6 or Oracle Linux 6, Oracle will only provide ASMLib software and updates when configured

Unbreakable Enterprise Kernel (UEK). Oracle will not provide ASMLib packages for kernels distributed

by Red Hat as part of RHEL 6 or the Red Hat compatible kernel in Oracle Linux 6. ASMLib updates will

be delivered via Unbreakable Linux Network(ULN) which is available to customers with Oracle Linux

support. ULN works with both Oracle Linux or Red Hat Linux installations, but ASMlib usage will

require replacing any Red Hat kernel with UEK

因此,在Red Hat Enterprise Linux (RHEL)6上使用ASMLib已不再现实,另外ASMLib也有一定的

缺点,详见文档说明:

http://www.oracledatabase12g.com/archives/why-asmlib-and-why-not.html

因此,目前在Red Hat Enterprise Linux (RHEL)6上使用Oracle+ASM,已不再使用ASMLib,而是

采用udev设备文件来配置ASM

 

一.1.2  什么是 udev  

udev Linux2.6 内核里的一个功能,它替代了原来的devfs,成为当前Linux 默认的设备管理

工具。udev 以守护进程的形式运行,通过侦听内核发出来的uevent 来管理/dev目录下的设备文

件。不像之前的设备管理工具,udev 在用户空间(user space) 运行,而不在内核空间(kernel space) 

运行。

 

一.1.3  Why ASMLIB and why not?

 ASMLIB是一种基于Linux module,专门为Oracle Automatic Storage Management特性设计的内核支持库(kernel support library)

长久以来我们对ASMLIB的认识并不全面,这里我们来具体了解一下使用ASMLIB的优缺点。

理论上我们可以从ASMLIB API中得到的以下益处:

· 总是使用direct,async IO

· 解决了永久性设备名的问题,即便在重启后设备名已经改变的情况下

· 解决了文件权限、拥有者的问题

· 减少了I/O期间从用户模式到内核模式的上下文切换,从而可能降低cpu使用率

· 减少了文件句柄的使用量

· ASMLIB API提供了传递如I/O优先级等元信息到存储设备的可能

虽然从理论上我们可以从ASMLIB中得到性能收益,但实践过程中这种优势是几乎可以忽略的,没有任何性能报告显示ASMLIB对比Linux上原生态的udev设备管理服务有任何性能上的优势。在Oracle官方论坛上有一篇<ASMLib and Linux block devices>讨论ASMLIB性能收益的帖子,你可以从中看到”asmlib wouldnt necessarily give you much of an io performance benefit, its mainly for ease of management as it will find/discover the right devices for you, the io effect of asmlib is large the same as doing async io to raw devices.”的评论,实际上使用ASMLIB和直接使用裸设备(raw device)在性能上没有什么差别。

ASMLIB可能带来的缺点:

· 对于多路径设备(multipathing)需要在/etc/sysconfig/oracleasm-_dev_oracleasm配置文件中设置ORACLEASM_SCANORDERORACLEASM_SCANEXCLUDE,以便ASMLIB能找到正确的设备文件,具体可以参考Metalink Note<How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks? [ID 602952.1]>

· 因为ASM INSTANCE使用ASMLIB提供的asm disk,所以增加了额外的层面

· 每次Linux Kernel更新,都需要替换新的ASMLIB

· 增加了因人为错误造成宕机downtime的可能

· 使用ASMLIB意味着要花费更多时间去创建和维护

· 因为ASMLIB的存在,可能引入更多的bug,这是我们最不想看到的

· 使用ASMLIB创建的disk,其disk header并不会和普通的asm disk header有什么不同,仅仅是在头部多出了ASMLIB的属性空间。

结论:
我个人的观点是尽可能不要使用ASMLIB,当然这不是DBA个人所能决定的事情。另一方面这取决于个人习惯,rhel 4的早期发行版本中没有提供udev这样的设备管理服务,这导致在rhel 4中大量的ASM+RAC组合的系统使用ASMLIB , 经网友指出udev 作为kernel 2.6的新特性被引入,在rhel4的初始版本中就已经加入了udev绑定服务,但是在rhel4时代实际udev的使用并不广泛(In Linux 2.6, a new feature was introduced to simplify device management and hot plug capabilities. This feature is called udev and is a standard package in RHEL4 or Oracle
Enterprise Linux 4 (OEL4) as well as Novells SLES9 and SLES10.)。如果是在RHEL/OEL 5中那么你已经有充分的理由利用udev而放弃ASMLIB

Reference:
ASMLIB Performance vs Udev
RAC+ASM 3 years in production Stories to share
How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks? [ID 602952.1]
ASMLib and Linux block devices

 

一.2  在 RHEL 6.4 上安装 Oracle 11gR2 + ASM --使用udev

实验环境

OS: Oracle Linux Server release 6.4 x64 或 RHEL6.4 

Database: Oracle Database 11gR2 x64 (11.2.0.1.0)

VMware: VMware Workstation 10.0.0 build-812388

软件: 

① xmanager-passive

② XSHELL

 

一.2.1  检查硬件

在正式安装开始前,请先检查你的软硬件条件是否满足安装需要。

硬件上可以使用命令查看内存情况和 CPU 特性:

#more    /proc/meminfo  

#more  /proc/cpuinfo

其中内存的要求是不低于 1G

下面的不是必须的,可选使用

#df k /dev/shm  检查共享内存

#df k   /tmp    检查临时磁盘空间

#more /proc/version  检查操作系统版本

#uname r  检查内核版本

 

内存

# grep MemTotal /proc/meminfo

交换空间

# grep SwapTotal /proc/meminfo

磁盘空间

# df -ah

# free

#free -m

 

spacer.gif

 

Minimum: 1 GB of RAM

 

Recommended: 2 GB of RAM or more

 ?

To determine the RAM size, enter the following command:

 # grep MemTotal /proc/meminfo

 

swap检查

 

Between 1 GB and 2 GB  1.5 times the size of the RAM

Between 2 GB and 16 GB  Equal to the size of the RAM

More than 16 GB  16 GB

# grep SwapTotal /proc/meminfo

 

To determine the available RAM and swap space, enter the following command:

 

# free -m

 

?The following tables describe the disk space requirements for software files and data files for each installation type on Linux x86:

Installation Type  Requirement for Software Files (GB)

Enterprise Edition   3.95

Standard Edition     3.88

 

Installation Type  Disk Space for Data Files (GB)

Enterprise Edition  1.7

Standard Edition  1.5

 

[root@yutian ~]# cat /proc/version

Linux version 2.6.18-164.el5 (mockbuild@x86-002.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:51:54 EDT 2009

[root@yutian ~]#  lsb_release -id

Distributor ID: RedHatEnterpriseServer

Description:    Red Hat Enterprise Linux Server release 5.4 (Tikanga)

[root@yutian ~]#

一.2.2  安装软件包检查

 

可以统一检查:

rpm -q binutils \

compat-libstdc++-33 \

elfutils-libelf \

gcc \

gcc-c++ \

glibc \

glibc-common \

glibc-devel \

glibc-headers \

ksh \

libaio \

libaio-devel \

libgomp \

libgcc \

libstdc++ \

libstdc++-devel \

make \

sysstat \

unixODBC \

unixODBC-devel \

numactl-devel

 

我们可以看到没有安装过的包会已is not installed 出现:

[root@rhel6_lhr ~]# rpm -q binutils \

> compat-libstdc++-33 \

> elfutils-libelf \

> gcc \

> gcc-c++ \

> glibc \

> glibc-common \

> glibc-devel \

> glibc-headers \

> ksh \

> libaio \

> libaio-devel \

> libgomp \

> libgcc \

> libstdc++ \

> libstdc++-devel \

> make \

> sysstat \

> unixODBC \

> unixODBC-devel \

> numactl-devel

binutils-2.20.51.0.2-5.36.el6.x86_64

compat-libstdc++-33-3.2.3-69.el6.x86_64

compat-libstdc++-33-3.2.3-69.el6.i686

elfutils-libelf-0.152-1.el6.x86_64

gcc-4.4.7-4.el6.x86_64

gcc-c++-4.4.7-4.el6.x86_64

glibc-2.12-1.132.el6.x86_64

glibc-common-2.12-1.132.el6.x86_64

glibc-devel-2.12-1.132.el6.x86_64

glibc-headers-2.12-1.132.el6.x86_64

package ksh is not installed

libaio-0.3.107-10.el6.x86_64

libaio-devel-0.3.107-10.el6.x86_64

libaio-devel-0.3.107-10.el6.i686

libgomp-4.4.7-4.el6.x86_64

libgcc-4.4.7-4.el6.x86_64

libstdc++-4.4.7-4.el6.x86_64

libstdc++-devel-4.4.7-4.el6.x86_64

libstdc++-devel-4.4.7-4.el6.i686

make-3.81-20.el6.x86_64

sysstat-9.0.4-22.el6.x86_64

unixODBC-2.2.14-12.el6_3.x86_64

unixODBC-2.2.14-12.el6_3.i686

unixODBC-devel-2.2.14-12.el6_3.i686

unixODBC-devel-2.2.14-12.el6_3.x86_64

package numactl-devel is not installed

[root@rhel6_lhr ~]# 

 

如果部分包不存在

可以批量更新安装,但如果依赖关系缺失,可能需要多执行两遍

或者手工调整

 

1、检查下列包是否安装,若未安装则要先安装:

 

rpm -qa | grep  binutils-

rpm -qa | grep  compat-libstdc++-

rpm -qa | grep  elfutils-libelf-

rpm -qa | grep  elfutils-libelf-devel-

rpm -qa | grep  glibc-

rpm -qa | grep  glibc-common-

rpm -qa | grep  glibc-devel-

rpm -qa | grep  gcc-

rpm -qa | grep  gcc-c++-

rpm -qa | grep  libaio- 

rpm -qa | grep  libaio-devel-

rpm -qa | grep  libgcc- 

rpm -qa | grep  libstdc++-

rpm -qa | grep  libstdc++-devel- 

rpm -qa | grep  make- 

rpm -qa | grep  sysstat-

rpm -qa | grep  unixODBC-

rpm -qa | grep  unixODBC-devel-

 

binutils-2.17.50.0.6-2.el5 

compat-libstdc++-33-3.2.3-61 

elfutils-libelf-0.125-3.el5

elfutils-libelf-devel-0.125

glibc-2.5-12

glibc-common-2.5-12 

glibc-devel-2.5-12 

gcc-4.1.1-52 

gcc-c++-4.1.1-52

libaio-0.3.106 

libaio-devel-0.3.106 

libgcc-4.1.1-52 

libstdc++-4.1.1 

libstdc++-devel-4.1.1-52.e15 

make-3.81-1.1 

sysstat-7.0.0 

unixODBC-2.2.11 

unixODBC-devel-2.2.11

 

# rpm -qa | grep make gcc glibc compat openmotif21 setarch 等等

 

建议你用 rpm q  packagename  逐个检查,因为是官方要求,所以为了不在安装时出现不必要的麻烦,还是确认都全部安装为好。

虽然我是全新安装的系统也存在 个包没安装:Libaio-devel    numactl-devel   sysstat  

 挂载 Linux 5  光盘,查找包的完整路径名称:

[root@localhost ~]# mkdir   /media/cdrom ; mount   /dev/cdrom   /media/cdrom

[root@localhost ~]# ll   /media/cdrom/Server/ |grep libaio-devel

[root@localhost ~]# ll   /media/cdrom/Server/ |grep numactl-devel

[root@localhost ~]# ll   /media/cdrom/Server/ |grep sysstat

spacer.gif

 

安装 RPM 包:

[root@localhost ~]# rpm -ivh /media/cdrom/Server/libaio-devel-0.3.106-3.2.i386.rpm 

[root@localhost ~]# rpm -ivh /media/cdrom/Server/numactl-devel-0.9.8-7.el5.i386.rpm 

[root@localhost ~]# rpm -ivh /media/cdrom/Server/sysstat-7.0.2-3.el5.i386.rpm 

 

rpm -ivh compat-libstdc++-33-3.2.3-69.el6.i686.rpm --force --nodeps

spacer.gif

 

[root@localhost RHEL_6.5 x86_64 Disc 1]# pwd

/media/RHEL_6.5 x86_64 Disc 1

[root@localhost RHEL_6.5 x86_64 Disc 1]# 

 

另外,为了支持 ODBC 建议顺便安装下面两个包:

unixODBC-2.2.11 (32 bit) or later

unixODBC-devel-2.2.11 (32 bit) or later

 

spacer.gif

 

 

一.2.3  修改主机名

永久生效:

[root@zijuan /]# vim /etc/sysconfig/network                                       

NETWORKING=yes                                                                    

NETWORKING_IPV6=yes                                                               

HOSTNAME=zijuan                                                                   

 

HOSTNAME=zijuan表示主机设置为zijuan. 

注意:修改主机名后,需要重启系统后生效,或者切换个用户然后切换回来就OK

 

查看/etc/hosts文件中必须包含a fully qualified name for the server

 [root@localhost lhr]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.128.131 rhel6_linux_asm

[root@localhost lhr]# hostname

localhost.localdomain

[root@localhost lhr]# hostname rhel6.5_linux

[root@localhost lhr]# hostname

 rhel6_linux_asm

 

修改/etc/hosts文件

[root@oracle ~]#vim/etc/hosts

127.0.0.1 localhost.localdomainlocalhost

::1 localhost6.localdomain6localhost6

192.168.137.112 oracle.domain.comoracle

注意将主机名对应到真实ip地址,否则oracle有可能将监听程序仅仅建立在127.0.0.1

一.2.4  网络配置

如果要配置em的话,这里最后把系统的ip地址设置成静态的ip地址,不然可能导致em访问的时候改变了数据库服务器的ip地址,从而导致其它问题的出现,具体静态ip地址配置参考:

E:\云盘\资料盘\李华荣(个人整理)\oracle-linux\linux.doc

 

一.2.5  磁盘准备

 

这里我们准备5块硬盘

 

1块硬盘安装操作系统

234块用于实现ASM 存储数据

5块硬盘用于存储FRA

 

一.2.5.1  添加磁盘

1.1. 编辑虚拟机配置

spacer.gif

1.2. 添加硬件




     本文转自lhrbest 51CTO博客,原文链接:http://blog.51cto.com/lhrbest/1432820,如需转载请自行联系原作者





相关文章
|
域名解析 Java Apache
Maven 公共代理库
Maven 公共仓库提供了对 maven central、jcenter、google、spring 等常用的 Maven 仓库的镜像功能。用户可以通过页面浏览仓库内容、检索和下载制品。在构建时使用 Maven 个公共仓库地址下载制品速度更快,更稳定。
46893 1
Maven 公共代理库
|
XML Android开发 数据格式
Android TabLayout 使用进阶(含源码)(下)
Android TabLayout 使用进阶(含源码)(下)
302 0
Android TabLayout 使用进阶(含源码)(下)
|
XML Android开发 数据格式
Android TabLayout 使用进阶(含源码)(上)
Android TabLayout 使用进阶(含源码)(上)
275 0
Android TabLayout 使用进阶(含源码)(上)
|
API Android开发 开发者
XUI 一个简洁而优雅的Android原生UI框架,解放你的双手
XUI 一个简洁而优雅的Android原生UI框架,解放你的双手
1626 0
XUI 一个简洁而优雅的Android原生UI框架,解放你的双手
|
Android开发
安卓问题集-Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
错误出现原因: 1、没有 AndroidManifest.xml file文件(出现几率较小) 2. 是你在外面修改了包名而在 AndroidManifest.xml file.文件中没有同步过去导致的错误。可能原因是包名首字母大写,首字母应该小写
4004 0
|
Android开发
SmartRefreshLayout + BaseRecyclerviewAdapterHelper 使用MVP方式实现下拉刷新
关键字:SmartRefreshLayout使用 下拉刷新 上拉加载 BaseRecyclerviewAdapterHelper 前言 下拉刷新和上拉加载是每个APP中最基本的功能,这里将这个功能进行整理。
4108 0
|
4天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101786 0
|
5天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...