Oracle单实例数据库迁移到Oracle RAC环境之--数据导出导入 系统环境: 操作系统:RedHat EL55 Oracle : Oracle 11.2.0.1.0 集群软件:Oracle GI 11.2.0.1.0 本案例采用的是通过数据的导入导出(EXPDP/IMPDP)的迁移方式 650) this.width=650;" src="http://w
Oracle单实例数据库迁移到Oracle RAC环境之--数据导出导入
系统环境:
操作系统:RedHat EL55
Oracle : Oracle 11.2.0.1.0
集群软件:Oracle GI 11.2.0.1.0
本案例采用的是通过数据的导入导出(EXPDP/IMPDP)的迁移方式
从单实例的库迁移数据到RAC环境,可以有多种方式,通过数据的导出和导入也可以,但前提是数据库采用相同的字符集。
1、数据库环境
单实例:
17:35:59 SYS@ test1>SELECT * FROM V$VERSION;
BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production Elapsed: 00:00:00.02
17:35:36 SYS@ test1>select userenv('LANGUAGE') FROM DUAL;
USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.ZHS16GBK
RAC 环境:
17:46:03 SYS@ prod1>SELECT * FROM V$VERSION;
BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production Elapsed: 00:00:00.16
17:46:29 SYS@ prod1>select instance_name,status from gv$instance;
INSTANCE_NAME STATUS ---------------- ------------ prod1 OPEN prod2 OPEN
17:45:40 SYS@ prod1>select userenv('LANGUAGE') FROM DUAL;
USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.ZHS16GBK
2、建立测试环境
单实例:
17:38:26 SYS@ test1>create tablespace test01
17:41:40 2 datafile '/dsk1/oradata/test1/test01.dbf' size 100m;
Tablespace created.
17:43:49 SYS@ test1>create user test1 identified by test1
17:44:00 2 default tablespace test01
17:44:00 3 temporary tablespace tmpgp1
17:44:00 4 quota unlimited on test01
17:44:00 5 account unlock;
17:44:00 SYS@ test1>grant connect ,resource to test1;
Grant succeeded.
17:50:34 SYS@ test1>conn test1/test1
Connected.
17:50:41 TEST1@ test1>create table testtb1 tablespace test01 as select * from scott.emp;
Table created.
Elapsed: 00:00:00.25
17:50:52 TEST1@ test1>create index test_empno_ind on testtb1(empno) tablespace indx;
Index created.
Elapsed: 00:00:00.05
如果做表空间传输,需要对表空间做自包含检测:
17:51:15 SYS@ test1>EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('test01', TRUE);
PL/SQL procedure successfully completed.
Elapsed: 00:01:04.07
17:52:25 SYS@ test1>SELECT * FROM TRANSPORT_SET_VIOLATIONS;
no rows selected
Elapsed: 00:00:00.05
创建导出传输目录:
17:52:43 SYS@ test1>create directory exp_dir as '/home/oracle/exp';
Directory created.
Elapsed: 00:00:00.07
17:53:24 SYS@ test1>grant read,write on directory exp_dir to test1;
Grant succeeded.
Elapsed: 00:00:00.06
17:53:39 SYS@ test1>!mkdir ~/exp
导出schema:
[oracle@rh6 exp]$ expdp test1/test1 directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1
Export: Release 11.2.0.1.0 - Production on Thu Jul 10 17:59:05 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "TEST1"."SYS_EXPORT_SCHEMA_02": test1/******** directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 256 KB Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/COMMENT . . exported "TEST1"."SYS_EXPORT_SCHEMA_01" 139.4 KB 1073 rows . . exported "TEST1"."TESTTB1" 8.570 KB 14 rows Master table "TEST1"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded ****************************************************************************** Dump file set for TEST1.SYS_EXPORT_SCHEMA_02 is: /home/oracle/exp/test.dmp Job "TEST1"."SYS_EXPORT_SCHEMA_02" successfully completed at 17:59:28
3、在RAC环境下导入数据:
从单实例传输dump文件到RAC环境下:
[oracle@rh6 exp]$ scp *.dmp 192.168.8.21:/u01/exp
The authenticity of host '192.168.8.21 (192.168.8.21)' can't be established. RSA key fingerprint is 39:04:88:3b:54:34:3c:34:d2:df:74:37:fe:5f:92:2d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.8.21' (RSA) to the list of known hosts. oracle@192.168.8.21's password: test.dmp 100% 428KB 428.0KB/s 00:00
在RAC下建立表空间和Schema:
18:16:28 SYS@ prod1>create tablespace test01; Tablespace created. Elapsed: 00:00:06.27 18:19:19 SYS@ prod1>create tablespace indx; Tablespace created. Elapsed: 00:00:05.81 18:19:36 SYS@ prod1>select file_name,file_id,tablespace_name,bytes/1024/1024 from dba_data_files; FILE_NAME FILE_ID TABLESPACE_NAME BYTES/1024/1024 -------------------------------------------------- ---------- --------------------------- +DG1/prod/datafile/users.259.852387481 4 USERS 5 +DG1/prod/datafile/undotbs1.258.852292707 3 UNDOTBS1 105 +DG1/prod/datafile/sysaux.257.852292707 2 SYSAUX 630 +DG1/prod/datafile/system.256.852292703 1 SYSTEM 690 +DG1/prod/datafile/example.264.852292891 5 EXAMPLE 103.125 +DG1/prod/datafile/undotbs2.265.852293259 6 UNDOTBS2 50 +DG1/prod/datafile/tbs1.269.852376681 7 TBS1 100 +DG1/prod/datafile/test01.273.852574753 8 TEST01 100 +DG1/prod/datafile/indx.274.852574771 9 INDX 100 9 rows selected.
18:14:34 SYS@ prod1>create user test1 identified by test1 18:14:49 2 default tablespace users 18:14:49 3 temporary tablespace temp 18:14:49 4 quota unlimited on users 18:14:49 5 account unlock; User created. Elapsed: 00:00:00.15 18:14:50 SYS@ prod1> 18:14:50 SYS@ prod1>grant connect,resource to test1; Grant succeeded.
建立数据导入目录:
18:15:31 SYS@ prod1>create directory imp_dir as '/u01/exp'; Directory created. 18:16:08 SYS@ prod1>grant read,write on directory imp_dir to test1; Grant succeeded. Elapsed: 00:00:00.16 [root@node1 ~]# mkdir -p /u01/exp [root@node1 ~]# chown -R oracle:dba /u01/exp
导入数据:
[root@node1 ~]# su - oracle
[oracle@node1 ~]$ cd /u01/exp
[oracle@node1 exp]$ ls
test.dmp
[oracle@node1 exp]$ impdp test1/test1 directory=imp_dir dumpfile=test.dmp logfile=test.log schemas=test1
Import: Release 11.2.0.1.0 - Production on Thu Jul 10 18:21:05 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options Master table "TEST1"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded Starting "TEST1"."SYS_IMPORT_SCHEMA_01": test1/******** directory=imp_dir dumpfile=test.dmp logfile=test.log schemas=test1 Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA . . imported "TEST1"."SYS_EXPORT_SCHEMA_01" 139.4 KB 1073 rows . . imported "TEST1"."TESTTB1" 8.570 KB 14 rows Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/COMMENT Job "TEST1"."SYS_IMPORT_SCHEMA_01" successfully completed at 18:21:42
数据导入成功!
4、验证:
18:19:45 SYS@ prod1>conn test1/test1 Connected. 18:22:20 TEST1@ prod1>select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- SYS_EXPORT_SCHEMA_01 TABLE TESTTB1 TABLE Elapsed: 00:00:00.08 18:22:24 TEST1@ prod1>select * from testtb1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 40 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.02 18:22:34 TEST1@ prod1> 17:47:08 SYS@ prod2>conn test1/test1 Connected. 18:22:54 TEST1@ prod2>select * from testtb1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 40 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected. Elapsed: 00:00:00.31
数据导入错误案例:
错误(1):
[oracle@rh6 ~]$ expdp test1/test1 directory=exp_dir dumpfile=~/exp/test.dmp logfile=~/exp/test.log schemas=test1
Export: Release 11.2.0.1.0 - Production on Thu Jul 10 17:55:21 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39088: file name cannot contain a path specification
在dumpfile和logfile指定的参数不能指定路径!
错误(2):
[oracle@rh6 ~]$ cd exp
[oracle@rh6 exp]$ expdp test1/test1 directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1
Export: Release 11.2.0.1.0 - Production on Thu Jul 10 17:56:19 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "TEST1"."SYS_EXPORT_SCHEMA_01": test1/******** directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
UDE-04031: operation generated ORACLE error 4031
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","SELECT job_id FROM v$datapum...","SQLA","tmp")
ORA-06512: at "SYS.KUPV$FT_INT", line 2904
ORA-06512: at "SYS.KUPC$QUE_INT", line 572
ORA-25254: time-out in LISTEN while waiting for a message
ORA-06512: at "SYS.DBMS_DATAPUMP", line 3263
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4488
ORA-06512: at line 1
出现了ORA-04031错误,应该和share pool 有关系!
查看系统共享池:
17:57:59 SYS@ test1>show parameter shared
NAME TYPE VALUE ------------------------------------ -------------------------------- ------------------- hi_shared_memory_address integer 0 max_shared_servers integer shared_memory_address integer 0 shared_pool_reserved_size big integer 12M shared_pool_size big integer 112M shared_server_sessions integer shared_servers integer 0
调整share pool的size:
17:58:01 SYS@ test1>alter system set shared_pool_size=200m ;
System altered.
Elapsed: 00:00:00.65
调整后重新导出成功:
[oracle@rh6 exp]$ expdp test1/test1 directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1
Export: Release 11.2.0.1.0 - Production on Thu Jul 10 17:59:05 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "TEST1"."SYS_EXPORT_SCHEMA_02": test1/******** directory=exp_dir dumpfile=test.dmp logfile=test.log schemas=test1 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 256 KB Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/COMMENT . . exported "TEST1"."SYS_EXPORT_SCHEMA_01" 139.4 KB 1073 rows . . exported "TEST1"."TESTTB1" 8.570 KB 14 rows Master table "TEST1"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded ****************************************************************************** Dump file set for TEST1.SYS_EXPORT_SCHEMA_02 is: /home/oracle/exp/test.dmp Job "TEST1"."SYS_EXPORT_SCHEMA_02" successfully completed at 17:59:28
@至此,数据迁移完成!

InnoDB는 Redologs 및 Undologs를 사용하여 데이터 일관성과 신뢰성을 보장합니다. 1. Redologs는 사고 복구 및 거래 지속성을 보장하기 위해 데이터 페이지 수정을 기록합니다. 2. 결점은 원래 데이터 값을 기록하고 트랜잭션 롤백 및 MVCC를 지원합니다.

설명 명령에 대한 주요 메트릭에는 유형, 키, 행 및 추가가 포함됩니다. 1) 유형은 쿼리의 액세스 유형을 반영합니다. 값이 높을수록 Const와 같은 효율이 높아집니다. 2) 키는 사용 된 인덱스를 표시하고 NULL은 인덱스가 없음을 나타냅니다. 3) 행은 스캔 한 행의 수를 추정하여 쿼리 성능에 영향을 미칩니다. 4) Extra는 최적화해야한다는 Filesort 프롬프트 사용과 같은 추가 정보를 제공합니다.

Temporary를 사용하면 MySQL 쿼리에 임시 테이블을 생성해야 할 필요성이 있으며, 이는 별개의, 그룹 비 또는 비 인덱스 열을 사용하여 순서대로 발견됩니다. 인덱스 발생을 피하고 쿼리를 다시 작성하고 쿼리 성능을 향상시킬 수 있습니다. 구체적으로, 설명 출력에 사용되는 경우, MySQL은 쿼리를 처리하기 위해 임시 테이블을 만들어야 함을 의미합니다. 이것은 일반적으로 다음과 같은 경우에 발생합니다. 1) 별개 또는 그룹을 사용할 때 중복 제거 또는 그룹화; 2) OrderBy가 비 인덱스 열이 포함되어있을 때 정렬하십시오. 3) 복잡한 하위 쿼리 또는 조인 작업을 사용하십시오. 최적화 방법은 다음과 같습니다. 1) Orderby 및 GroupB

MySQL/InnoDB는 4 개의 트랜잭션 격리 수준을 지원합니다. Readuncommitted, ReadCommitted, ReturableRead 및 Serializable. 1. READUCMITTED는 커밋되지 않은 데이터를 읽을 수 있으므로 더러운 판독 값을 유발할 수 있습니다. 2. ReadCommitted는 더러운 읽기를 피하지만 반복 할 수없는 독서가 발생할 수 있습니다. 3. RepeatableRead는 더러운 읽기와 반복 할 수없는 독서를 피하는 기본 레벨이지만 팬텀 독서가 발생할 수 있습니다. 4. 직렬화 가능한 것은 모든 동시성 문제를 피하지만 동시성을 줄입니다. 적절한 격리 수준을 선택하려면 균형 잡힌 데이터 일관성 및 성능 요구 사항이 필요합니다.

MySQL은 웹 응용 프로그램 및 컨텐츠 관리 시스템에 적합하며 오픈 소스, 고성능 및 사용 편의성에 인기가 있습니다. 1) PostgreSQL과 비교하여 MySQL은 간단한 쿼리 및 높은 동시 읽기 작업에서 더 잘 수행합니다. 2) Oracle과 비교할 때 MySQL은 오픈 소스와 저렴한 비용으로 인해 중소 기업에서 더 인기가 있습니다. 3) Microsoft SQL Server와 비교하여 MySQL은 크로스 플랫폼 응용 프로그램에 더 적합합니다. 4) MongoDB와 달리 MySQL은 구조화 된 데이터 및 트랜잭션 처리에 더 적합합니다.

MySQL Index Cardinality는 쿼리 성능에 중대한 영향을 미칩니다. 1. 높은 카디널리티 인덱스는 데이터 범위를보다 효과적으로 좁히고 쿼리 효율성을 향상시킬 수 있습니다. 2. 낮은 카디널리티 인덱스는 전체 테이블 스캔으로 이어질 수 있으며 쿼리 성능을 줄일 수 있습니다. 3. 관절 지수에서는 쿼리를 최적화하기 위해 높은 카디널리티 시퀀스를 앞에 놓아야합니다.

MySQL 학습 경로에는 기본 지식, 핵심 개념, 사용 예제 및 최적화 기술이 포함됩니다. 1) 테이블, 행, 열 및 SQL 쿼리와 같은 기본 개념을 이해합니다. 2) MySQL의 정의, 작업 원칙 및 장점을 배우십시오. 3) 인덱스 및 저장 절차와 같은 기본 CRUD 작업 및 고급 사용량을 마스터합니다. 4) 인덱스의 합리적 사용 및 최적화 쿼리와 같은 일반적인 오류 디버깅 및 성능 최적화 제안에 익숙합니다. 이 단계를 통해 MySQL의 사용 및 최적화를 완전히 파악할 수 있습니다.

MySQL의 실제 응용 프로그램에는 기본 데이터베이스 설계 및 복잡한 쿼리 최적화가 포함됩니다. 1) 기본 사용 : 사용자 정보 삽입, 쿼리, 업데이트 및 삭제와 같은 사용자 데이터를 저장하고 관리하는 데 사용됩니다. 2) 고급 사용 : 전자 상거래 플랫폼의 주문 및 재고 관리와 같은 복잡한 비즈니스 로직을 처리합니다. 3) 성능 최적화 : 인덱스, 파티션 테이블 및 쿼리 캐시를 사용하여 합리적으로 성능을 향상시킵니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
