Oracle单实例迁移到RAC实例(oracle转移数据文件)
sinye56 2024-10-06 00:34 7 浏览 0 评论
Oracle单实例迁移到RAC实例
将Oracle 单实例迁移到 RAC 实例上有两种方法:
1. 使用RMAN 复制
2. 使用逻辑导出导入(exp/imp) 或者 数据泵(expdp/impdp)
Oracle单实例迁移到RAC实例--使用RMAN 异机恢复
一. 大致操作步骤流程如下:
1. 安装Clusterware 和 ASM 实例
2. 备份源库,并将备份集copy到rac 节点上
3. 在RAC 上还原并修改初始化参数文件,还原控制文件和数据文件
4. 增加undo 表空间和redo log 线程组,创建密钥文件
5. 配置RAC监听
6. 将数据库等资源添加到CRS
注意: 迁移的2个db版本版本要一致。包括小版本。 比如10.2.0.4.0.
测试的时候是从10.2.0.5.0 迁移到10.2.0.5.0
Redhat 5.4 Orcle RAC 数据库 从10.2.0.1升级到 10.2.0.5
二. 具体操作步骤
2.1 安装Clusterware 和ASM 实例
上述安装相信能阅读小子此文档的诸位此能力已然具备,所以不再赘述。
附图参考:
2.1.1 运行DBCA 命令
[oracle@rac1 ~]$ dbca
2.1.2 选择 configure Automatic Storage Management, 来创建ASM 实例
2.1.3 选择所有结点
2.1.4 输入密码:RAC 的spfile 必须放在共享目录下。参数文件我们选择第一个initialization parameter。 也可以放在我们建的裸设备上。
2.1.5 ASM 实例创建完后,用Create New 来创建ASM 磁盘组。我们用DATA来创建一个DATA 组,FRA 创建FLASH_RECOVERY_AREA组。
注: Redundancy 一般选external 就是也就是不考虑冗余,假如选normal 则是mirror, 至少要一个FailGroup. 选High 就是triple mirror,3倍镜像,需要三个FailGroup。
2.1.6 创建完成后,能看到组的状态是Mount, ASM 组必须mount之后才能使用。
在这里,如果asm 服务必须要启动。如果没有启动,就手动启动它。
安装之后的进程如下:
[oracle@rac1 ~]$ crs_stat -t
集群监听状态查看:
[oracle@rac1 ~]$ lsnrctl status
2.2 在源库用RMAN 备份,并将备份文件copy到rac上
注意:保持单实例和RAC数据库SID一致(SID为db10g)
rman备份之前,单实例数据库为归档模式(archilve log list 来查看)
若未归档用:startup mount;
alter database archivelog; 改到归档模式
RAC上已经安装CRS以及ORACLE软件但未建库
2.2.1备份全库:
[oracle@singledb ~]$ rman target /
RMAN> list backup;
using target database control file instead of recovery catalog
RMAN> run {
2> backup full database format '/orabk/full_%d_%T_%U.bak';
3> backup archivelog all format '/orabk/arc_%U.bak' delete input;
4> copy current controlfile to '/orabk/control_bak.ctl';
5> }
备份之后的信息如下:
RMAN> list backup summary;
[oracle@db10g orabk]$ ls -l
2.2.1将备份文件SCP 到RAC 服务器:
[oracle@singledb orabk]$ scp * 192.168.10.101:/orabk
2.3 还原并修改初始化文件
2.3.1 还原spfile 到pfile(可复制、创建、RMAN恢复等)
[oracle@rac1 ~]$ export ORACLE_SID=db10g1
[oracle@rac1 ~]$ rman target /
RMAN> startup nomount
RMAN> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora'
2> from '/orabk/full_DB10G_20130516_02o9pjb1_1_1.bak ';
查看刚才恢复的参数文件:
[oracle@rac1 ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs
[oracle@rac1 dbs]$ ls
[oracle@rac1 dbs]$ cat initdb10g1.ora
这里面都是单实例的参数,需要把这个改成RAC的参数。
2.3.2 查看ASM 实例的相关目录信息
[oracle@rac1 ~]$ export ORACLE_SID=+ASM1
[oracle@rac1 ~]$ sqlplus / as sysdba
SYS@+ASM1(rac1)> col state format a10
SYS@+ASM1(rac1)> col name format a15
SYS@+ASM1(rac1)> col failgroup format a20
SYS@+ASM1(rac1)> set line 200
SYS@+ASM1(rac1)> select state,redundancy,total_mb,free_mb,name,failgroup from v$asm_disk;
SYS@+ASM1(rac1)> select group_number,name,state,type,total_mb,free_mb,unbalanced from v$asm_diskgroup;
2.3.3 在ASM下创建目录
[oracle@rac1 ~]$ export ORACLE_SID=+ASM1
[oracle@rac1 ~]$ asmcmd
创建的目录结构如下:
DATA/
RAC/
CONTROLFILE/
DATAFILE/
TEMPFILE/
ONLINELOG/
PARAMETERFILE/
FRA/
RAC/
ARCHIVELOG
2.3.4 创建系统目录(2个节点)
[oracle@rac1 ~]$ cd $ORACLE_BASE/admin
[oracle@rac1 admin]$ ls
+ASM
[oracle@rac1 admin]$ mkdir db10g
[oracle@rac1 admin]$ cd db10g
[oracle@rac1 db10g]$ mkdir adump bdump cdump dpdump hdump pfile udump
[oracle@rac1 db10g]$ ll
2.3.5 修改初始化参数
注意事项:
(1)RMAN 异机恢复的db_name 必须和备份的一致,如果说想改成其他名称,可以等还原之后,再用nid 命令修改。
(2)控制文件需要指定到共享设备上
(3)检查audit_file_dest、background_dump_dest、core_dump_dest、log_archive_dest_1、user_dump_dest等参数的位置。如果2个节点和共享位置没有对应的目录,先把目录建好。
最终修改之后的pfile 文件如下:
[oracle@rac1 db10g]$ cd $ORACLE_HOME/dbs
[oracle@rac1 dbs]$ cat initanqing.ora
db10g.__db_cache_size=188743680
db10g.__java_pool_size=4194304
db10g.__large_pool_size=4194304
db10g.__shared_pool_size=79691776
db10g.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/db10g/adump'
*.background_dump_dest='/u01/app/oracle/admin/db10g/bdump'
*.cluster_database_instances=2
*.cluster_database=true
*.compatible='10.2.0.5.0'
*.control_files='+DATA/RAC/CONTROLFILE/control01.ctl','+DATA/RAC/CONTROLFILE /control02.ctl','+DATA/RAC/CONTROLFILE /control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/db10g/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='db10g'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'
db10g1.instance_name='anqing1'
db10g2.instance_name='anqing2'
db10g1.instance_number=1
db10g2.instance_number=2
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION==+FRA/RAC/ARCHIVELOG'
*.log_archive_format='%t_%s_%r.arc'
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=283115520
db10g1.thread=1
db10g2.thread=2
*.undo_management='AUTO'
db10g1.undo_tablespace='UNDOTBS1'
db10g2.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/db10g/udump'
2.3.6 用修改的pfile 来创建spfile,注意放在共享设备上
[oracle@rac1 ~]$ export ORACLE_SID=db10g1
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL> create spfile='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'
2 from
3 pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora';
到ASM里验证一下:
ASMCMD> pwd
+DATA/RAC/PARAMETERFILE
ASMCMD> ls
spfiledb10g.ora
在所有节点上,修改pfile内容,将其指向共享设备上的spfile:
[oracle@rac1 ~]$ echo "SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'" > /u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora
[oracle@rac1 ~]$ cd $ORACLE_HOME/dbs
[oracle@rac1 dbs]$ cat initdb10g1.ora
SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'
2.4 创建口令文件
在所有节点执行:
[oracle@rac1 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g1 password=oracle
[oracle@rac2 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g2 password=oracle
2.5 还原控制文件
在其中一个节点上执行。
2.5.1 用spfile,将DB 启动到nomount 状态
[oracle@rac1 dbs]$ sqlplus / as sysdba
SQL> startup nomount;
SQL> show parameter spfile
2.5.2 RMAN 执行对控制文件的恢复
[oracle@rac1 dbs]$ rman target /
RMAN> restore controlfile from '/orabk/control_bak.ctl ';
这个位置是在初始化参数里指定的,到ASM 实例里验证下:
ASMCMD> cd DATA/rac/controlfile
ASMCMD> ls
control01.ctl
control02.ctl
control03.ctl
2.6 restore数据库
在其中一个节点执行
2.6.1 将数据库启动到MOUNT状态
RMAN> alter database mount;
2.6.2 查看源库数据文件存储位置信息
注意一点,单实例和RAC 实例存储数据文件的位置不同,如果使用rman 的duplicate,那么使用log_file_name_convert 和 db_file_name_convert来进行转换,在这个实验中,使用的是RMAN的异机恢复,所以只能在restore的时候用set newname来进行转换。
SQL> col file_id format 9
SQL> col file_name format a30
SQL> select file_id,file_name from dba_data_files;
SQL> select file_id,file_name from dba_temp_files;
2.6.3 在RAC上restore 数据文件
RMAN> run {
2> set newname for datafile 1 to '+DATA/rac/DATAFILE/system01.dbf';
3> set newname for datafile 2 to '+DATA/rac/DATAFILE/undotbs01.dbf';
4> set newname for datafile 3 to '+DATA/rac/DATAFILE/sysaux01.dbf';
5> set newname for datafile 4 to '+DATA';
6> set newname for tempfile 1 to '+DATA/rac/TEMPFILE/temp01.dbf';
7> restore database;
8> switch datafile all;
9> switch tempfile all;
10> }
-- 从这里可以看到,对tempfile 仅仅是rename:即更新控制文件。
注意:
(1)datafile 3 和 4的区别,datafile 4 我没有指定具体的文件名,那么在还原时会使用ASM 自己的命名方式来命名datafile 4. 其他的文件会创建别名。
(2)对switch的说明:
对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括文件的路径信息。 这里的switch的作用,就是更新控制文件里的信息。
(3)restore 的时候不会对temp 表空间进行restore。所以等restore 之后,需要手工创建temp表空间。
不过在这个测试里,还是对tempfile 进行了指定。 但是这个操作只更新控制文件,不恢复数据文件。
到ASM 实例里查看一下:
ASMCMD> cd db10g/datafile
ASMCMD> pwd
+DATA/db10g/datafile
ASMCMD> ls
SYSAUX.262.815794931
SYSTEM.260.815794931
UNDOTBS1.261.815794931
USERS.263.815794933
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSAUX.262.815794931
DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSTEM.260.815794931
DATAFILE UNPROT COARSE MAY 19 01:00:00 Y UNDOTBS1.261.815794931
DATAFILE UNPROT COARSE MAY 19 01:00:00 Y USERS.263.815794933
-- 映射别名
ASMCMD> cd ../..
ASMCMD> cd rac/tempfile
ASMCMD> ls
--tempfile 对应的目录为空,即没有恢复数据文件。
2.7 recover 数据库
在执行restore的节点执行,因为备份文件在该节点上。
RMAN> recover database;
最后一行的错误说明:
RMAN-06054: media recovery requesting unknown log: thread 1 seq 12 lowscn 206051
这里是提醒恢复到一个未知的scn号。在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间,就可以避免这个错误。
2.8 处理online redo
因为此时另一个节点还没有配好,所以我们只能在执行恢复的节点上处理redo。
SYS@db10g1(rac1)> set wrap off;
SYS@db10g1(rac1)> select * from v$logfile;
SYS@db10g1(rac1)>alter database rename file '/oradata/db10g/redo01.log' to '+DATA/rac/onlinelog/redo01.log';
SYS@db10g1(rac1)> alter database rename file '/oradata/db10g/redo02.log' to '+DATA/rac/onlinelog/redo02.log';
SYS@db10g1(rac1)> alter database rename file '/oradata/db10g/redo03.log' to '+DATA/rac/onlinelog/redo03.log';
SYS@db10g1(rac1)> select * from v$logfile;
ASMCMD> pwd
+DATA/rac/onlinelog
ASMCMD> ls
注意这个时候,对应目录还是空的,当open db 的时候,oracle 会自动创建online redo log。这里修改的目的就是改变online redo 的位置。
2.9 open resetlogs 打开DB
在恢复的节点执行该操作。
SYS@db10g1(rac1)> alter database open resetlogs;
SYS@db10g1(rac1)> select name,open_mode from v$database;
SYS@db10g1(rac1)> col comp_name for a35
SYS@db10g1(rac1)> col version for a15
SYS@db10g1(rac1)> col status for a10
SYS@db10g1(rac1)> select comp_name,version,status from sys.dba_registry;
2.10检查并修改几个初始化参数
SYS@db10g1(rac1)> col parameter for a30
SYS@db10g1(rac1)> col value for a10
SYS@db10g1(rac1)> select * from v$option where parameter = 'Real Application Clusters';
SYS@db10g1(rac1)> show parameter cluster
SYS@db10g1(rac1)> show parameter thread
SYS@db10g1(rac1)> show parameter instance_number
由上述返回结果可知,RAC特性是支持的,如果尚未启用集群数据库,接下来首先要改的,就是enable CLUSTER DATABASE,操作如下:
SYS@db10g1(rac1)> alter system set cluster_database=true scope=spfile;
修改2个节点的配置参数:
SYS@db10g1(rac1)> alter system set cluster_database_instances=2 scope=spfile;
SYS@db10g1(rac1)> alter system set instance_number=1 scope=spfile sid='db10g1';
SYS@db10g1(rac1)> alter system set instance_number=2 scope=spfile sid='db10g2';
SYS@db10g1(rac1)> alter system set thread=1 scope=spfile sid='db10g1';
SYS@db10g1(rac1)> alter system set thread=2 scope=spfile sid='db10g2';
2.11创建节点2的undo 表空间
SYS@db10g1(rac1)> col name for a10
SYS@db10g1(rac1)> col type for a10
SYS@db10g1(rac1)> col value for a10
SYS@db10g1(rac1)> show parameter undo_tablespace
这个是rac1上节点的信息,在之前的在spfile参数指定的rac2节点的undo 空间是UNDOTBS2。所以这里创建该undo 表空间,并指定相关参数。
SYS@anqing1(rac1)> create undo tablespace UNDOTBS2 datafile '+DATA/rac/datafile/undotbs02.dbf' size 500m;
Tablespace created.
--这里直接指定别名
ASMCMD> pwd
+DATA/rac/datafile
ASMCMD> ls
sysaux01.dbf
system01.dbf
undotbs01.dbf
undotbs02.dbf
ASMCMD> pwd
+DATA/db10g/datafile
ASMCMD> ls
SYSAUX.262.815794931
SYSTEM.260.815794931
UNDOTBS1.261.815794931
UNDOTBS2.268.815805971
USERS.263.815794933
SYS@anqing1(rac1)> alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='db10g2';
System altered.
2.12添加rac2 节点的redo 文件
rac 的redo 是接其他节点来的,我们之前的rac1上已经有3组,所以我们这里从4开始,在添加2组给rac2,使用thread 2.
SYS@db10g1(rac1)> alter database add logfile thread 2 group 4 '+DATA' size 100m;
Database altered.
SYS@db10g1(rac1)> alter database add logfile thread 2 group 5 '+DATA' size100m;
Database altered.
SYS@db10g1(rac1)> alter database enable thread 2;
Database altered.
2.13重启节点1和节点2 上的实例,使相关参数生效
节点1:
SYS@db10g1(rac1)> shutdown immediate
SYS@db10g1(rac1)> startup
SYS@db10g1(rac1)> show parameter cluster
节点2:
[oracle@rac2 dbs]$ sqlplus / as sysdba
SQL> startup
SQL> show parameter cluster
最后确认:
SYS@db10g1(rac1)> select instance_number,instance_name,host_name from gv$instance;
到现在已经是集群了,不过还有一些收尾的工作要做。
2.14执行catclust.sql脚本来创建相关视图
SYS@anqing1(rac1)> @$ORACLE_HOME/rdbms/admin/catclust.sql
2.15 重建Temp 表空间
步骤如下:
SYS@db10g1(rac1)> select name from v$tempfile;
SYS@db10g1(rac1)> alter tablespace temp
add tempfile '+DATA/rac/tempfile/temp02.dbf' size 100M;
SYS@db10g1(rac1)> alter database tempfile
'+DATA/anqing/tempfile/temp01.dbf' offline;
SYS@anqing1(rac1)> alter database tempfile
'+DATA/anqing/tempfile/temp01.dbf' drop including datafiles;
SYS@anqing1(rac1)> select name from v$tempfile;
2.16 添加集群的监听
2.17添加信息注册到CRS
[oracle@rac1 ~]$ srvctl add database -d db10g -o $ORACLE_HOME -p +DATA/ANQING/PARAMETERFILE/spfileanqing.ora
[oracle@rac1 ~]$ srvctl add instance -d db10g -i db10g1 -n rac1
[oracle@rac1 ~]$ srvctl add instance -d db10g -i db10g2 -n rac2
修改instance 和 asm 之间的依赖关系:
[oracle@rac1 ~]$ srvctl modify instance -d db10g -i db10g1 -s +ASM1
[oracle@rac1 ~]$ srvctl modify instance -d db10g -i db10g2 -s +ASM2
查看:
[oracle@rac1 ~]$ crs_stat -t
这里并没有启动,因为服务是刚添加上来的,还没有同步。启动一下就ok了。
[oracle@rac1 ~]$ srvctl start database -d db10g
启动之后再来查,各个进程正常:
[oracle@rac1 ~]$ crs_stat -t
Oracle单实例迁移到RAC实例--使用导出导入方法
详细见之前的Oracle-备份与恢复(一)expdp/impdp详解。
相关推荐
- Linux中10大常用命令之sort使用案例
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言Linux中的sort命令用于对文本文件的内容进行排序。本教程向您展示了sort...
- java开发常用的Linux命令,高频的没你想象的多
-
Linux的命令非常多,多到有些使用的场景你工作两三年也没有遇到过,工作三四年才能遇到(Linux内核开发,Shell脚本开发,嵌入式开发、、、),但这个不是今天分享的重点,今天分享的重点是Java开...
- linux常用命令(收藏版)
-
linux小白注意啦,给大家分享一点干货,请笑纳!1.关机命令shutdown-hnow关闭系统(1)init0关闭系统(2),0为系统的进程号telinit0关闭系统(3)shutdo...
- 延续Win10三年需付超3000元!微软彻底封堵:删除绕过Win11系统要求教程、将第三方工具标记为恶意软件
-
一切都是为了用户能够正规地升级到Windows11。整理|屠敏出品|CSDN(ID:CSDNnews)距离Windows10退役仅剩8个月,微软最近这段时间,终是忍不住接连出手了...
- 敲完就让你提桶跑路的Linux命令
-
不谨慎可能就会让你提桶的Linux命令!!!删除文件rm-rf该命令是删除文件或文件夹等最快的方式之一。删除后的内容很难恢复,如果删除系统文件可能会导致系统崩坏。˃rm-rf/#强制删除根...
- 超级蠕虫,累计感染40万台服务器,让Linux内核服务器感染两年
-
最近著名安全公司ESET发布安全报告,报告分析了其对一个超级蠕虫Ebury的15年追踪分析。在15年中该病毒持续感染了40万台服务器,曾经在2011年(2009年)攻克了Linux内核维护站点kern...
- linux redhat破解密码
-
适用于RedhatCentosFedora1.开机选择第一个启动项,按e进入编辑模式2.在启动项编辑模式找到linux16开头的文件,按ctrl+e快速定位到该行的行末,输入空格rd.break...
- 慎用!Linux最危险的10个命令!
-
Linux是一个强大而灵活的操作系统,它提供了许多功能丰富的命令和工具,让用户可以方便地管理和控制系统。但是,有些命令如果不小心或不知情地使用,可能会造成严重的后果,甚至导致系统崩溃或数据丢失。因此,...
- Linux文件和目录删除
-
今天只讲一个命令,这个命令已经让万千运维人既爱又恨。rm删除文件或者目录基本用法:-i显示删除提示信息-f强制删除文件-r进行目录的递归删除在公司里为了保证数据安全,一般会创建一个alias...
- 给你的Linux系统穿上“防弹衣”:安全加固全攻略
-
为什么Linux系统需要安全加固在当今数字化时代,Linux系统以其开源、稳定、高效等特性,在服务器领域占据着举足轻重的地位。无论是大型互联网公司的核心业务,还是中小企业的日常运营,都离不开L...
- 一天一个Linux命令:文件操作「删」rm
-
命令:rm-rf文件名(慎用,慎用,慎用)rm(选项)(参数)命令功能:rm-rf是一条UNIX系统下的文件删除命令,作用是无提示地强制递归删除一个目录中的一个或多个文件或目录,如果没有使用...
- Linux下通过 rm -f 删除大量文件时报错:Argument list too long
-
问题现象云服务器ECSLinux下通过rm-f删除大量的小文件时出现类似如下错误信息:-bash:?/bin/rm:?Argument?list?too?long如下图所示:问题原因如?待删...
- 这10个Linux命令太危险,千万慎用!数据毁灭的瞬间只需一个回车
-
你好,这里是网络技术联盟站,我是瑞哥。Linux系统,以其开源自由的特性,吸引了无数开发者和科技爱好者。其强大的命令行工具赋予了用户前所未有的控制能力。然而,正如俗话所说,“能力越大,责任越大”。某些...
- Linux的10大危险命令,用过的运维都很刑
-
rm-rf命令该命令可能导致不可恢复的系统崩坏。˃rm-rf/#强制删除根目录下所有东西。˃rm-rf*#强制删除当前目录的所有文件。˃rm-rf.#强制删除当前...
- Linux环境变量设置与查看全攻略
-
Linux环境变量设置与查看全攻略在Linux系统中,环境变量是用于定义系统和用户级设置的一种方法,它可以影响程序的行为和系统的运行方式。了解如何设置和查看环境变量对于Linux用户来说是非常重要的技...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)