当前位置:首页 > CN2资讯 > 正文内容

Oracle 10G windows 平台 DataGuard 实例

8小时前CN2资讯


server A: 10.85.10.44  SID=orcl ­

target server B: 10.85.10.43 ­

oracle version:10.2.0.1 ­

OS platform : windows XP ­

Primary设置:

1. 设置主数据库为force logging 模式

SQL>sqlplus "/as sysdba" ­

SQL>alter database force logging; ­

2. 设置主数据库为归档模式

SQL> archive log list ­

SQL> shutdown immediate ­

SQL> startup mount ­

SQL> alter database archivelog; ­

SQL> archive log list ­

3. 添加"备用联机日志文件"

先查看日志文件位置: ­

SQL>select * from v$logfile; ­

在添加: ­

SQL> alter database add standby logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo04.log') size 50m; ­

SQL> alter database add standby logfile group 5 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo05.log') size 50m; ­

SQL> alter database add standby logfile group 6 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo06.log') size 50m; ­

SQL> alter database add standby logfile group 7 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo07.log') size 50m; ­

4. 创建主库的初始化参数给备库用

SQL>Create pfile from spfile; ­

产生的文件名为initorcl.ora 存放目录默认放在$ORACLE_HOME/database下 ­

5. 在主库创建备库的控制文件 和密码文件

SQL>Alter database create standby controlfile as 'D:/oracle/product/10.2.0/control01.ctl'; ­

D:>orapwd file=D:/PWDorcl.ora password=admin entries=5; ­

 

缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)

6.  在主库创建监听和配置tnsnams.ora

listener.ora配置如下: ­

# listener.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/listener.ora­

# Generated by Oracle configuration tools.­

SID_LIST_LISTENER =­

  (SID_LIST =­

    (SID_DESC =­

      (SID_NAME = PLSExtProc)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (PROGRAM = extproc)­

    )­

    (SID_DESC =­

      (GLOBAL_DBNAME = orcl)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (SID_NAME = orcl)­

    )­

  )­

LISTENER =­

  (DESCRIPTION_LIST =­

    (DESCRIPTION =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    )­

  )­

tnsnames.ora配置如下: ­

# tnsnames.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora­

# Generated by Oracle configuration tools.­

primary =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

standby =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.43)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

EXTPROC_CONNECTION_DATA =­

  (DESCRIPTION =­

    (ADDRESS_LIST =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

    )­

    (CONNECT_DATA =­

      (SID = PLSExtProc)­

      (PRESENTATION = RO)­

    )­

  )­

7. 在initorcl.ora添加以下内容:

*.log_archive_format='%T%S%r.ARC' ­

*.DB_UNIQUE_NAME='primary' ­

*.log_archive_config='DG_CONFIG=(primary,standby)' ­

*.log_archive_dest_1='location=D:/oracle/product/10.2.0/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' ­

*.log_archive_dest_2='SERVICE=standby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' ­

*.STANDBY_FILE_MANAGEMENT=AUTO ­

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE ­

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE ­

*.FAL_SERVER='standby' ­

*.FAL_CLIENT='primary' ­

关闭数据库,在用initorcl.ora重启,并创建spfile文件 ­

SQL>startup pfile='$ORACLE_HOME/database/initorcl.ora' ­

SQL>create spfile from pfile='$ORACLE_HOME/database/initorcl.ora' ­

8.­

A. 拷贝数据文件,参数文件,控制文件,密码文件到备库上

initorcl.ora参数文件,PWDorcl.ora密码文件考到$ORACLE_HOME/database下的, ­

controlbak.ctl 考到$ORACLE_base/oradata/orcl/下,并分别重命名为control01.ctl,control01.ctl,control01.ctl ­

数据文件考到$ORACLE_base/oradata/orcl/下 ­

B. 用Rman拷贝,不用停机­

$ rman target /­

RMAN> backup full format 'D:/FULL_%d_%T_%s.bak' database include current controlfile for standby;­

RMAN> sql 'alter system archive log current';­

RMAN> Backup ArchiveLog all format='D:/arch_%d_%T_%s.bak'; ­

备份完后将备份文件拷到standby上同样的目录,强调:同样的目录,在standby进行rman 恢复即可­

9. 启动主数据库

SQL>startup ­

--------------------------------------------------------------------- ­

Standy操作:

1. 用oradim工具创建备库orcl实例

oradim.exe -new -sid orcl -startmode m ­

oradim.exe -edit -sid orcl -startmode a ­

2. 创建备库存放数据文件和后台跟踪目录

   $ORACLE_BASE/ORADATA/ORCL ­

   $ORACLE_BASE/admin/orcl ­

   $ORACLE_BASE/admin/orcl/adump ­

   $ORACLE_BASE/admin/orcl/bdump ­

   $ORACLE_BASE/admin/orcl/cdump ­

   $ORACLE_BASE/admin/orcl/dpdump ­

   $ORACLE_BASE/admin/orcl/pfile ­

   $ORACLE_BASE/admin/orcl/udump ­

   $ORACLE_BASE/admin/orcl/ ­

3. 添加"备用联机日志文件"

SQL>startup mount ­

先查看日志文件位置: ­

SQL>select * from v$logfile; ­

在添加: ­

SQL> alter database add standby logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo04.log') size 50m; ­

SQL> alter database add standby logfile group 5 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo05.log') size 50m; ­

SQL> alter database add standby logfile group 6 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo06.log') size 50m; ­

SQL> alter database add standby logfile group 7 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo07.log') size 50m; ­

4. 在备库创建监听和配置tnsnams.ora

listener.ora配置如下: ­

# listener.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/listener.ora­

# Generated by Oracle configuration tools.­

SID_LIST_LISTENER =­

  (SID_LIST =­

    (SID_DESC =­

      (SID_NAME = PLSExtProc)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (PROGRAM = extproc)­

    )­

    (SID_DESC =­

      (GLOBAL_DBNAME = orcl)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (SID_NAME = orcl)­

    )­

  )­

LISTENER =­

  (DESCRIPTION_LIST =­

    (DESCRIPTION =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    )­

  )­

tnsnames.ora配置如下: ­

# tnsnames.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora­

# Generated by Oracle configuration tools.­

primary =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

standby =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.43)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

EXTPROC_CONNECTION_DATA =­

  (DESCRIPTION =­

    (ADDRESS_LIST =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

    )­

    (CONNECT_DATA =­

      (SID = PLSExtProc)­

      (PRESENTATION = RO)­

    )­

  )­

5. 测试主备之间网络连通

  primary: ­

   C:>lsnrctl start ­

   C:>tnsping standby ­

standby ­

   C:>lsnrctl start ­

   C:>tnsping primary ­

6. 配置备库初始化参数

编辑$ORACLE_HOME/database目录下的initorcl.ora添加以下内容 ­

*.log_archive_format='%T%S%r.ARC' ­

*.DB_UNIQUE_NAME='standby' ­

*.log_archive_config='DG_CONFIG=(primary,standby)' ­

*.log_archive_dest_1='location=D:/oracle/product/10.2.0/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby' ­

*.log_archive_dest_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary' ­

*.STANDBY_FILE_MANAGEMENT=AUTO ­

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE ­

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE ­

*.FAL_SERVER='primary' ­

*.FAL_CLIENT='standby' ­

7. 启动备用数据库

C:>set ORACLE_SID=orcl ­

SQL>sqlplus "/as sysdba" ­

SQL>startup nomount pfile='D:/oracle/product/10.2.0/db_1/database/initorcl.ora'; ­

SQL>create spfile from pfile='D:/oracle/product/10.2.0/db_1/database/initorcl.ora'; ­

若采用Rman备份的, 则在此standby 端进行 Rman还原数据库:­

$rman target sys/admin@primary auxiliary /­

RMAN> duplicate target database for standby dorecover nofilenamecheck;


SQL>alter database mount standby database ; ­

SQL>alter database recover managed standby database disconnect from session; ­

---------------------------------------------------------------------------

测试

 

注意Data Guard 启动顺序:

启动顺序:先standby ,后primary;
primary 后standby;

 

 

在备库将实例启动到mount 状态:

SQL> startup nomount;

SQL>alter database mount standby database ; 

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

SQL>alter database recover managed standby database disconnect from session; 

 

在备库启动监听:

$lsnrctl start

 

在主库启动实例:

SQL> startup;

 

在主库启动监听:

$lsnrctl start

 

在主库验证归档目录是否有效:

SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;

如果有错误,要排查原因。

 

SQL> alter system switch logfile;

 

SQL> select max(sequence#) from v$archived_log;

 

MAX(SEQUENCE#)

--------------

            70

 

主备查询结果一致,Data Guard 搭建结束。

 

 

1. 测试主库产生的归档日志是否能正常传送到归档日志

主库进行日志切换: ­

SQL>Alter system switch logfile; ­

  然后分别查看主库和备库的D:/arch目录下是否产生了同样的归档日志 ­

文件。 ­

select max(sequence#) from v$archived_log; ­

select max(sequence#) from v$log_history; ­

select group#,sequence#,archived,status from v$log; ­

select name,sequence#,applied from v$archived_log; ­

select sequence#,applied from v$archived_log; ­

若不同步,

1. 看log日志, archive是否有丢失 ­

2. 可以在备库坐如下操作: ­

alter database recover managed standby database cancel; ­

alter database recover managed standby database disconnect from session; ­

-----------------------------------------------------------------------

主备库切换

1. switchover

一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATA GUARD的物理STANDBY切换前需要注意: ­

确认主库和从库间网络连接通畅; ­

确认没有活动的会话连接在数据库中; ­

PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态; ­

确保STANDBY数据库处于ARCHIVELOG模式; ­

如果设置了REDO应用的延迟,那么将这个设置去掉; ­

确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。 ­

主库:

1. 查看switchover 状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; ­

      to standby ­

附:

        当出现session active的时候表示还有活动的session,则运行 ­

         Alter database commit to switchover to physical standby with session shutdown; ­

      当出现not allowed时,在官方文档说转换会不成功,但是我测试的时候成功了,如果大家在测试不成功的时候再和我说,让我看看在什么情况下会不成功。 ­

   ­

     B.ora- 01153: an incompatible media recovery is active ­

        运行下面代码 ­

        Alter database recover managed standby database finish; ­

        或者Alter database recover managed standby database finish force; ­

        Alter database recover managed standby database disconnect from session; ­

2 切换成备库

SQL>Alter database commit to switchover to physical standby with session shutdown; ­

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; ­

     Database altered. ­

3 启动到mount和应用日志状态

SQL> SHUTDOWN IMMEDIATE ­

SQL> startup nomount; ­

SQL> alter database mount standby database; ­

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; ­

4. 查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; ­

SQL>select status,database_mode from v$archive_dest_status; ­

备库:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; ­

    TO PRIMARY ­

附:若不是用此语句切换:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown ­

2. 切换成主库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ­

Database altered. ­

SQL> shutdown immediate; ­

SQL> startup; ­

SQL> alter system switch logfile; ­

3. 查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; ­

SQL>select status,database_mode from v$archive_dest_status; ­

注意地方:

如果做了switchover,主库参数设置成以下方式,会触发ora-16009错误 ­

Alert system set log_archive_dest_2=’service=primary ­

DB_UNIQUE_NAME=orcl’ scope=spfile; ­

然后再alert_orcl.log 日志中会出现以下错误内容 ­

Thu Nov 27 10:19:12 2008 ­

Redo Shipping Client Connect ­

-- Connected User is Valid ­

RFS[2]: Assigned to RFS process 1292 ­

RFS[2]: Database mount ID mismatch [0x4781d95f:0x47823be1] ­

RFS[2]: Client instance is standby database i ­

RFS[2]: Not using real app ­

Thu Nov 27 10:19Errors in file ­

d:/oracle/product/10.2.0/admin/orcl/udump/orc ­

ORA-16009: 远程归档日 ­

从metalink上查到: ­

* fact: Oracle Server - Enterprise Edition 9 ­

* symptom: Errors appears in alert.log on primary database ­

* symptom: RFS: client instance is standby database instead ­

* symptom: RFS: Not using real application clusters ­

* symptom: Errors appear in alert.log on standby database ­

* symptom: ­

database ­

standby database ­

primary database ­

* symptom: Standby redo log files are defined on the standby database ­

* cause: The standby redo log files are synchronously filled with redo ­

from the primary database. When a logswitch occur on the primary database, ­

those files are archived on the standby database before being applyed on ­

it. The archiving process on the standby database should only archive to ­

the local disks on tprimarfix: ­

Disable the remote archiving on the standby databasExample: alter system set log_archive_dest_2 = '' ­

是因为没有把standby 上的log_archive_dest_2 清空导致的。 ­

另外也有可 ­

bug 4676659 ­

Standby may not be recognised (ORA-16009) ­

When the log transport is LGWR ASYNC and logical standby has ­

LOG_ARCHIVE_DEST setting VALID_FOR=(ONLINE_LOGFILE, PRIMARY_ROLE) ­

ORA-16009 is reportedregular interWorkaround: ­

There is no workaround to prevent ORA-16009 from appearing in alert logs. ­

2. Failovers:

FAILOVER切换一般是PRIMARY数据库发生故障后的切换,这种情况是STANDBY数据库发挥其作用的情况。这种切换发生后,可能会造成数据的丢失。而且这个过程不是可逆的,DATA GUARD环境会被破坏。 ­

由于PRIMARY数据库已经无法启动,所以FAILOVER切换所需的条件并不多,只要检查STANDBY是否运行在最大保护模式下,如果是的话,需要将其置为最大性能模式,否则切换到PRIMARY角色也无法启动。 ­

1.查看是否有日志GAP,没有应用的日志:

    SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; ­

  SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; ­

  如果有,则拷贝过来并且注册 ­

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径'; ­

重复查看直到没有应用的日志: ­

2. 然后停止应用归档:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ­

  Database altered. ­

3. 下面将STANDBY数据库切换为PRIMARY数据库:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ­

或 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ­

  Database altered. ­

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; ­

  DATABASE_ROLE ­

  ---------------- ­

  PHYSICAL STANDBY ­

  SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ­

  Database altered. ­

    SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup ­

  Database altered. ­

  检查数据库是否已经切换成功: ­

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; ­

  DATABASE_ROLE ­

  ---------------- ­

  PRIMARY ­

  至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。­

 

数据库模式查看:

 

1. 首先查看当前的保护模式数据库操作

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

-------------------- --------------------

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

 

2. 设置新的数据保护模式并重启数据库  数据库操作

 

当保护模式更改顺序:

maximize protection --->  maximize availability ----> maximize performance

当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,否则primary 必须在mount 状态。 

 

如:
SQL>  alter database set standby database to maximize availability;

 alter database set standby database to maximize availability

*

ERROR at line 1:

ORA-01126: database must be mounted in this instance and not open in any

instance

 

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

 

报错了,这是因为最大可用性需要先修改日志传送方式为lgwr同步方式,否则,​​数据库​​是无法open.

 

Maximum protection/AVAILABILITY模式必须满足以下条件

Redo Archival Process: LGWR

Network Tranmission mode: SYNC

Disk Write Option: AFFIRM

Standby Redo Logs: Yes

standby database type: Physical Only

 

SQL> alter system set log_archive_dest_2='service=orcl_st lgwr sync AFFIRM';

System altered.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> alter database open;

Database altered.

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

--------------------          --------------------

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

 

 

alter database set standby database to maximize performance;

提示:maximize后可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分别对应最大保护,最高可用性及最高性能。

 

在最大保护模式下,直接关闭备库是不行的,如果在备库上关闭数据库,会有如下提示:
SQL> shutdown immediate
ORA-01154: database busy. Open, close, mount, and dismount not allowed now
SQL>
在最大保护模式下,备库是不允许关闭的,此时首先关闭主库,然后备库就可以顺利关闭了。

注意: 主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。 


分享到: 


server A: 10.85.10.44  SID=orcl ­

target server B: 10.85.10.43 ­

oracle version:10.2.0.1 ­

OS platform : windows XP ­

Primary设置:

1. 设置主数据库为force logging 模式

SQL>sqlplus "/as sysdba" ­

SQL>alter database force logging; ­

2. 设置主数据库为归档模式

SQL> archive log list ­

SQL> shutdown immediate ­

SQL> startup mount ­

SQL> alter database archivelog; ­

SQL> archive log list ­

3. 添加"备用联机日志文件"

先查看日志文件位置: ­

SQL>select * from v$logfile; ­

在添加: ­

SQL> alter database add standby logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo04.log') size 50m; ­

SQL> alter database add standby logfile group 5 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo05.log') size 50m; ­

SQL> alter database add standby logfile group 6 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo06.log') size 50m; ­

SQL> alter database add standby logfile group 7 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo07.log') size 50m; ­

4. 创建主库的初始化参数给备库用

SQL>Create pfile from spfile; ­

产生的文件名为initorcl.ora 存放目录默认放在$ORACLE_HOME/database下 ­

5. 在主库创建备库的控制文件 和密码文件

SQL>Alter database create standby controlfile as 'D:/oracle/product/10.2.0/control01.ctl'; ­

D:>orapwd file=D:/PWDorcl.ora password=admin entries=5; ­

 

缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)

6.  在主库创建监听和配置tnsnams.ora

listener.ora配置如下: ­

# listener.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/listener.ora­

# Generated by Oracle configuration tools.­

SID_LIST_LISTENER =­

  (SID_LIST =­

    (SID_DESC =­

      (SID_NAME = PLSExtProc)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (PROGRAM = extproc)­

    )­

    (SID_DESC =­

      (GLOBAL_DBNAME = orcl)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (SID_NAME = orcl)­

    )­

  )­

LISTENER =­

  (DESCRIPTION_LIST =­

    (DESCRIPTION =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    )­

  )­

tnsnames.ora配置如下: ­

# tnsnames.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora­

# Generated by Oracle configuration tools.­

primary =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

standby =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.43)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

EXTPROC_CONNECTION_DATA =­

  (DESCRIPTION =­

    (ADDRESS_LIST =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

    )­

    (CONNECT_DATA =­

      (SID = PLSExtProc)­

      (PRESENTATION = RO)­

    )­

  )­

7. 在initorcl.ora添加以下内容:

*.log_archive_format='%T%S%r.ARC' ­

*.DB_UNIQUE_NAME='primary' ­

*.log_archive_config='DG_CONFIG=(primary,standby)' ­

*.log_archive_dest_1='location=D:/oracle/product/10.2.0/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' ­

*.log_archive_dest_2='SERVICE=standby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' ­

*.STANDBY_FILE_MANAGEMENT=AUTO ­

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE ­

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE ­

*.FAL_SERVER='standby' ­

*.FAL_CLIENT='primary' ­

关闭数据库,在用initorcl.ora重启,并创建spfile文件 ­

SQL>startup pfile='$ORACLE_HOME/database/initorcl.ora' ­

SQL>create spfile from pfile='$ORACLE_HOME/database/initorcl.ora' ­

8.­

A. 拷贝数据文件,参数文件,控制文件,密码文件到备库上

initorcl.ora参数文件,PWDorcl.ora密码文件考到$ORACLE_HOME/database下的, ­

controlbak.ctl 考到$ORACLE_base/oradata/orcl/下,并分别重命名为control01.ctl,control01.ctl,control01.ctl ­

数据文件考到$ORACLE_base/oradata/orcl/下 ­

B. 用Rman拷贝,不用停机­

$ rman target /­

RMAN> backup full format 'D:/FULL_%d_%T_%s.bak' database include current controlfile for standby;­

RMAN> sql 'alter system archive log current';­

RMAN> Backup ArchiveLog all format='D:/arch_%d_%T_%s.bak'; ­

备份完后将备份文件拷到standby上同样的目录,强调:同样的目录,在standby进行rman 恢复即可­

9. 启动主数据库

SQL>startup ­

--------------------------------------------------------------------- ­

Standy操作:

1. 用oradim工具创建备库orcl实例

oradim.exe -new -sid orcl -startmode m ­

oradim.exe -edit -sid orcl -startmode a ­

2. 创建备库存放数据文件和后台跟踪目录

   $ORACLE_BASE/ORADATA/ORCL ­

   $ORACLE_BASE/admin/orcl ­

   $ORACLE_BASE/admin/orcl/adump ­

   $ORACLE_BASE/admin/orcl/bdump ­

   $ORACLE_BASE/admin/orcl/cdump ­

   $ORACLE_BASE/admin/orcl/dpdump ­

   $ORACLE_BASE/admin/orcl/pfile ­

   $ORACLE_BASE/admin/orcl/udump ­

   $ORACLE_BASE/admin/orcl/ ­

3. 添加"备用联机日志文件"

SQL>startup mount ­

先查看日志文件位置: ­

SQL>select * from v$logfile; ­

在添加: ­

SQL> alter database add standby logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo04.log') size 50m; ­

SQL> alter database add standby logfile group 5 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo05.log') size 50m; ­

SQL> alter database add standby logfile group 6 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo06.log') size 50m; ­

SQL> alter database add standby logfile group 7 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/redo07.log') size 50m; ­

4. 在备库创建监听和配置tnsnams.ora

listener.ora配置如下: ­

# listener.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/listener.ora­

# Generated by Oracle configuration tools.­

SID_LIST_LISTENER =­

  (SID_LIST =­

    (SID_DESC =­

      (SID_NAME = PLSExtProc)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (PROGRAM = extproc)­

    )­

    (SID_DESC =­

      (GLOBAL_DBNAME = orcl)­

      (ORACLE_HOME = D:/oracle/product/10.2.0/db_1)­

      (SID_NAME = orcl)­

    )­

  )­

LISTENER =­

  (DESCRIPTION_LIST =­

    (DESCRIPTION =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    )­

  )­

tnsnames.ora配置如下: ­

# tnsnames.ora Network Configuration File: D:/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora­

# Generated by Oracle configuration tools.­

primary =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.44)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

standby =­

  (DESCRIPTION =­

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.3.43)(PORT = 1521))­

    (CONNECT_DATA =­

      (SERVER = DEDICATED)­

      (SERVICE_NAME = orcl)­

    )­

  )­

EXTPROC_CONNECTION_DATA =­

  (DESCRIPTION =­

    (ADDRESS_LIST =­

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))­

    )­

    (CONNECT_DATA =­

      (SID = PLSExtProc)­

      (PRESENTATION = RO)­

    )­

  )­

5. 测试主备之间网络连通

  primary: ­

   C:>lsnrctl start ­

   C:>tnsping standby ­

standby ­

   C:>lsnrctl start ­

   C:>tnsping primary ­

6. 配置备库初始化参数

编辑$ORACLE_HOME/database目录下的initorcl.ora添加以下内容 ­

*.log_archive_format='%T%S%r.ARC' ­

*.DB_UNIQUE_NAME='standby' ­

*.log_archive_config='DG_CONFIG=(primary,standby)' ­

*.log_archive_dest_1='location=D:/oracle/product/10.2.0/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby' ­

*.log_archive_dest_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary' ­

*.STANDBY_FILE_MANAGEMENT=AUTO ­

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE ­

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE ­

*.FAL_SERVER='primary' ­

*.FAL_CLIENT='standby' ­

7. 启动备用数据库

C:>set ORACLE_SID=orcl ­

SQL>sqlplus "/as sysdba" ­

SQL>startup nomount pfile='D:/oracle/product/10.2.0/db_1/database/initorcl.ora'; ­

SQL>create spfile from pfile='D:/oracle/product/10.2.0/db_1/database/initorcl.ora'; ­

若采用Rman备份的, 则在此standby 端进行 Rman还原数据库:­

$rman target sys/admin@primary auxiliary /­

RMAN> duplicate target database for standby dorecover nofilenamecheck;


SQL>alter database mount standby database ; ­

SQL>alter database recover managed standby database disconnect from session; ­

---------------------------------------------------------------------------

测试

 

注意Data Guard 启动顺序:

启动顺序:先standby ,后primary;
primary 后standby;

 

 

在备库将实例启动到mount 状态:

SQL> startup nomount;

SQL>alter database mount standby database ; 

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

SQL>alter database recover managed standby database disconnect from session; 

 

在备库启动监听:

$lsnrctl start

 

在主库启动实例:

SQL> startup;

 

在主库启动监听:

$lsnrctl start

 

在主库验证归档目录是否有效:

SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;

如果有错误,要排查原因。

 

SQL> alter system switch logfile;

 

SQL> select max(sequence#) from v$archived_log;

 

MAX(SEQUENCE#)

--------------

            70

 

主备查询结果一致,Data Guard 搭建结束。

 

 

1. 测试主库产生的归档日志是否能正常传送到归档日志

主库进行日志切换: ­

SQL>Alter system switch logfile; ­

  然后分别查看主库和备库的D:/arch目录下是否产生了同样的归档日志 ­

文件。 ­

select max(sequence#) from v$archived_log; ­

select max(sequence#) from v$log_history; ­

select group#,sequence#,archived,status from v$log; ­

select name,sequence#,applied from v$archived_log; ­

select sequence#,applied from v$archived_log; ­

若不同步,

1. 看log日志, archive是否有丢失 ­

2. 可以在备库坐如下操作: ­

alter database recover managed standby database cancel; ­

alter database recover managed standby database disconnect from session; ­

-----------------------------------------------------------------------

主备库切换

1. switchover

一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATA GUARD的物理STANDBY切换前需要注意: ­

确认主库和从库间网络连接通畅; ­

确认没有活动的会话连接在数据库中; ­

PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态; ­

确保STANDBY数据库处于ARCHIVELOG模式; ­

如果设置了REDO应用的延迟,那么将这个设置去掉; ­

确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。 ­

主库:

1. 查看switchover 状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; ­

      to standby ­

附:

        当出现session active的时候表示还有活动的session,则运行 ­

         Alter database commit to switchover to physical standby with session shutdown; ­

      当出现not allowed时,在官方文档说转换会不成功,但是我测试的时候成功了,如果大家在测试不成功的时候再和我说,让我看看在什么情况下会不成功。 ­

   ­

     B.ora- 01153: an incompatible media recovery is active ­

        运行下面代码 ­

        Alter database recover managed standby database finish; ­

        或者Alter database recover managed standby database finish force; ­

        Alter database recover managed standby database disconnect from session; ­

2 切换成备库

SQL>Alter database commit to switchover to physical standby with session shutdown; ­

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; ­

     Database altered. ­

3 启动到mount和应用日志状态

SQL> SHUTDOWN IMMEDIATE ­

SQL> startup nomount; ­

SQL> alter database mount standby database; ­

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; ­

4. 查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; ­

SQL>select status,database_mode from v$archive_dest_status; ­

备库:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; ­

    TO PRIMARY ­

附:若不是用此语句切换:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown ­

2. 切换成主库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ­

Database altered. ­

SQL> shutdown immediate; ­

SQL> startup; ­

SQL> alter system switch logfile; ­

3. 查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; ­

SQL>select status,database_mode from v$archive_dest_status; ­

注意地方:

如果做了switchover,主库参数设置成以下方式,会触发ora-16009错误 ­

Alert system set log_archive_dest_2=’service=primary ­

DB_UNIQUE_NAME=orcl’ scope=spfile; ­

然后再alert_orcl.log 日志中会出现以下错误内容 ­

Thu Nov 27 10:19:12 2008 ­

Redo Shipping Client Connect ­

-- Connected User is Valid ­

RFS[2]: Assigned to RFS process 1292 ­

RFS[2]: Database mount ID mismatch [0x4781d95f:0x47823be1] ­

RFS[2]: Client instance is standby database i ­

RFS[2]: Not using real app ­

Thu Nov 27 10:19Errors in file ­

d:/oracle/product/10.2.0/admin/orcl/udump/orc ­

ORA-16009: 远程归档日 ­

从metalink上查到: ­

* fact: Oracle Server - Enterprise Edition 9 ­

* symptom: Errors appears in alert.log on primary database ­

* symptom: RFS: client instance is standby database instead ­

* symptom: RFS: Not using real application clusters ­

* symptom: Errors appear in alert.log on standby database ­

* symptom: ­

database ­

standby database ­

primary database ­

* symptom: Standby redo log files are defined on the standby database ­

* cause: The standby redo log files are synchronously filled with redo ­

from the primary database. When a logswitch occur on the primary database, ­

those files are archived on the standby database before being applyed on ­

it. The archiving process on the standby database should only archive to ­

the local disks on tprimarfix: ­

Disable the remote archiving on the standby databasExample: alter system set log_archive_dest_2 = '' ­

是因为没有把standby 上的log_archive_dest_2 清空导致的。 ­

另外也有可 ­

bug 4676659 ­

Standby may not be recognised (ORA-16009) ­

When the log transport is LGWR ASYNC and logical standby has ­

LOG_ARCHIVE_DEST setting VALID_FOR=(ONLINE_LOGFILE, PRIMARY_ROLE) ­

ORA-16009 is reportedregular interWorkaround: ­

There is no workaround to prevent ORA-16009 from appearing in alert logs. ­

2. Failovers:

FAILOVER切换一般是PRIMARY数据库发生故障后的切换,这种情况是STANDBY数据库发挥其作用的情况。这种切换发生后,可能会造成数据的丢失。而且这个过程不是可逆的,DATA GUARD环境会被破坏。 ­

由于PRIMARY数据库已经无法启动,所以FAILOVER切换所需的条件并不多,只要检查STANDBY是否运行在最大保护模式下,如果是的话,需要将其置为最大性能模式,否则切换到PRIMARY角色也无法启动。 ­

1.查看是否有日志GAP,没有应用的日志:

    SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; ­

  SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; ­

  如果有,则拷贝过来并且注册 ­

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径'; ­

重复查看直到没有应用的日志: ­

2. 然后停止应用归档:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ­

  Database altered. ­

3. 下面将STANDBY数据库切换为PRIMARY数据库:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ­

或 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ­

  Database altered. ­

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; ­

  DATABASE_ROLE ­

  ---------------- ­

  PHYSICAL STANDBY ­

  SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ­

  Database altered. ­

    SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup ­

  Database altered. ­

  检查数据库是否已经切换成功: ­

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; ­

  DATABASE_ROLE ­

  ---------------- ­

  PRIMARY ­

  至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。­

 

数据库模式查看:

 

1. 首先查看当前的保护模式数据库操作

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

-------------------- --------------------

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

 

2. 设置新的数据保护模式并重启数据库  数据库操作

 

当保护模式更改顺序:

maximize protection --->  maximize availability ----> maximize performance

当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,否则primary 必须在mount 状态。 

 

如:
SQL>  alter database set standby database to maximize availability;

 alter database set standby database to maximize availability

*

ERROR at line 1:

ORA-01126: database must be mounted in this instance and not open in any

instance

 

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

 

报错了,这是因为最大可用性需要先修改日志传送方式为lgwr同步方式,否则,​​数据库​​是无法open.

 

Maximum protection/AVAILABILITY模式必须满足以下条件

Redo Archival Process: LGWR

Network Tranmission mode: SYNC

Disk Write Option: AFFIRM

Standby Redo Logs: Yes

standby database type: Physical Only

 

SQL> alter system set log_archive_dest_2='service=orcl_st lgwr sync AFFIRM';

System altered.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> alter database open;

Database altered.

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

--------------------          --------------------

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

 

 

alter database set standby database to maximize performance;

提示:maximize后可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分别对应最大保护,最高可用性及最高性能。

 

在最大保护模式下,直接关闭备库是不行的,如果在备库上关闭数据库,会有如下提示:
SQL> shutdown immediate
ORA-01154: database busy. Open, close, mount, and dismount not allowed now
SQL>
在最大保护模式下,备库是不允许关闭的,此时首先关闭主库,然后备库就可以顺利关闭了。

注意: 主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。 

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/27949.html

    分享给朋友:

    “Oracle 10G windows 平台 DataGuard 实例” 的相关文章

    如何利用VPS挖矿赚钱:低成本高收益的加密货币挖矿指南

    VPS挖矿的基本概念 VPS挖矿是一种利用虚拟专用服务器(VPS)的计算资源进行加密货币挖矿的方式。VPS通常用于托管网站或运行应用程序,但它的计算能力也可以被用来执行挖矿算法。挖矿本质上是通过解决复杂的数学问题来验证交易并创建新的加密货币区块,作为回报,矿工会获得一定数量的加密货币。VPS挖矿特别...

    JustHost评测:高性价比VPS服务的最佳选择

    JustHost是一家成立于2006年的俄罗斯主机商。多年来,它在VPS和服务器租用方面积累了相当的声誉,并建立了一个庞大的客户群体。刚开始时,它的目标是帮助用户实现更灵活、高效的网络解决方案,逐渐扩展到如今的多种服务提供。无论你是中小企业还是个人用户,JustHost的产品都能满足不同层次的需求。...

    如何利用闲置VPS赚钱 - 探索多种盈利方式

    在互联网蓬勃发展的背景下,很多人手中会有闲置的VPS(虚拟私人服务器)。这些资源如果不加利用,往往就是一笔浪费。因此,了解闲置VPS赚钱的方法十分必要。这不仅可以让我们的小投资产生回报,也能为我们探索更广阔的网络世界提供平台。 闲置VPS的定义相对简单,指的是那些未被充分利用的服务器资源。它们通常具...

    探索诸暨市:地理特征、气候与经济发展全面分析

    我发现诸暨市,这个位于浙江省中北部的县级市,真是一个令人着迷的地方。它东靠嵊州市,南面与东阳、义乌和浦江相邻,西面与桐庐和富阳相接,北边则与柯桥和萧山为界。这样的地理位置赋予了诸暨市独特的区域特色,方便了与周边城市的交流与发展。 在谈到诸暨的地理特征时,不得不提其独特的地形地貌。诸暨市位于浙东南和浙...

    CloudCone邮箱使用指南:申请、设置与故障排除全攻略

    什么是CloudCone邮箱? CloudCone邮箱是隶属于CloudCone主机商的邮箱系统,该公司成立于2014年,主要提供各类主机服务,包括Linux VPS、Windows VPS和独立服务器。CloudCone的业务重心在于美国洛杉矶机房,以其按小时计费的灵活性而受到用户欢迎。这种收费模...

    深度解析韩国makemodel:传统与现代结合的时尚理念

    markdown格式的内容 韩国makemodel概念 谈到韩国makemodel,我首先感受到了它所传递的深厚文化底蕴。这一时尚理念融合了传统与现代,不仅仅是对衣物的设计,更是一种对韩国文化的致敬。它通过巧妙的配搭,将历史悠久的韩服元素与现代流行趋势相结合,创造出一种独特的美学风格。每一件作品都像...