日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DAGAGUARD追加归档方式迁移到rac集群

發布時間:2024/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DAGAGUARD追加归档方式迁移到rac集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

客戶新買了oda x6-2,想替換原來的舊數據庫服務器。原來的環境安裝的是oracle11.2.0.4的單機版本dataguard,新的一體機安裝的是oracle11.2.0.4。對于客戶來說,想通過最短的時間來實現切換。最好的辦法就是通過rman來實現,追加歸檔,現在我們把具體的操作過程記錄下來。 1、安裝oda環境 oracle的一體機的安裝相當簡單,完全可以通過一鍵方式來實現。上傳專門為oda設計編譯的db.zip和grid.zip,通過自帶的工具便可安裝,這項工作主要由oda的工程師完成
配置ip這些都不用操心,只要給出網段,在安裝過程中,可以自動配置! 在安裝的oda機器上,進行以下 public ip : 10.10.10.131? ? erptest1-pub 10.10.10.141? ? erptest2-pub? 私網ip是由oda安裝過程中自動生成的,這個我們不用管了 vip ip:? ? ?10.10.10.132? ? erptest1-vip 10.10.10.142? ? erptest2-vip scan ip:? ? 10.10.10.200? ? nctest-scan 一鍵安裝的oda,建了三個dg:data,redo,reco,其中redo是建在固態硬盤上的! 2、配置備份目錄 oda上安裝的ACFS系統,共享存儲可以直接當普通文件系統用 創建備份目錄 [root@oldtest1 ~]# mkdir -p /backup [root@oldtest1 ~]# chown -R oracle:oinstall /backup 3、備份數據庫到目錄 備份建議在晚上業務少的時候做,備份前要記錄開始時間,還要多切換幾次歸檔 腳本如下:erpbackup.sh run { allocate channel c1 type disk maxpiecesize = 20G; allocate channel c2 type disk maxpiecesize = 20G; backup incremental level 0 database format '/backup/%d_DF_%T_%s_%p.bak' plus archivelog format '/backup/%d_AF_%T_%s_%p.log' delete all input; backup current controlfile format '/backup/%d_CTL_%T_%s_%p.bak'; release channel c1; release channel c2; } [oracle@oldtest1 ~]# chmod +x erpbackup.sh [oracle@oldtest1 ~]# nohup ./erpbackup.sh > erpbackup.sh.out & 備份時間大約一個小時。 4、新的oda機器上進行還原 --準備工作 通過SCP命令將rman備份傳輸到oda上 這里注意:我們可以按部就班一步步恢復spfile,controlfile,datafile等,然后將數據庫加入集群,創建監聽。 但是我用的是比較取巧的方法,就是先在oda上創建一個和原數據庫名稱一樣的數據庫,然后再手工刪除里面的控制文件,日志文件和數據文件,再進行恢復,這樣就避免了將遷移數據庫加入集群和創建監聽的麻煩。 ============================================= SQL> create pfile = '/u01/backup/oldspfile.ora' from spfile; or create spfile='+DATA/dg1/spfiledg1.ora' from pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initdg11.ora'; 注意: 修改參數:*.remote_listener,把里面的host部份,修改成當前的host部份。實例名保持與原機相同! 創建審計目錄,這個在參數文件中有,如果沒創建,無法啟動(兩個節點都要創建)
--還原控制文件 整個恢復過程,在一臺機器上做就行了 [oracle@erptest1 ~]# export ORACLE_SID=orcl1 [oracle@erptest1 ~]# rman target / RMAN> startup nomount pfile='/u01/backup/oldspfile.ora';
把數據庫啟動到nomount狀態 ============================================== RMAN>
4.1--恢復數據庫文件 restore controlfile from '/backup/DG1_CTL_20180314_40_1.bak'; 還原控制文件后,可以把數據庫啟動mount SQL> alter database mount; 腳本如下:restoredf.sh rman target / <run { set newname for datafile 1 to '+data'; set newname for datafile 2 to '+data'; set newname for datafile 3 to '+data'; set newname for datafile 4 to '+data'; set newname for tempfile 1 to '+data'; restore database ; switch datafile all; switch tempfile all; } exit EOF [oracle@erptest1 ~]# chmod +x restoredf.sh [oracle@erptest1 ~]# nohup ./restoredf.sh > restoredf.sh.out & 還原時間,大概使用了3個小時. 注意等到停機切換窗口后: 4.2--恢復歸檔日志 檢查需要恢復的歸檔 SQL> select THREAD#,min(SEQUENCE#) minseq,max(SEQUENCE#) maxseq from v$archived_log where COMPLETION_TIME > to_date('2014-05-24 11:00:00','yyyy-mm-dd hh24:mi:ss') group by THREAD#; THREAD#? ? ?MINSEQ? ? ?MAXSEQ ---------- ---------- ---------- 1? ? ? ? 777? ? ? ? 778 2? ? ? ? 605? ? ? ? 607

方法一:直接把那些歸檔拷貝到和原庫(spfile里記錄的歸檔目錄)一樣的目錄,然后執行如下的操作: rman>alter database mount rman>run{ restore database; recover database; } rman>alter database open resetlogs; rman>shutdown immediate; rman>startup; 最后要檢查下ps –ef |grep ora_實例進程數,如果進程過多,不用過于關注,只是數據庫沒有完全恢復的原因
=================================================================================
方法二:直接scp歸檔至recover database using backup controlfile until cancel;要求的目錄 傳輸之前要多切換幾次歸檔 scp ./arch? ?oracle@192.168.10.211:/backup --recover數據庫 這個時候,可以對數據庫進行 recover SQL> recover database using backup controlfile until cancel; ORA-00279: change 51849272 generated at 24/05/2014 11:32:23 needed for thread 1 ORA-00289: suggestion : /u01/arch/1_605_802032812.dbf ORA-00280: change 51849272 for thread 1 is in sequence #4762
Specify log: {=suggested | filename | AUTO | CANCEL} auto? --輸入auto 這樣,就可以把數據庫進行recover了 最后完成后,再執行一次 SQL> recover database using backup controlfile until cancel; 這個時候,選擇cancel
再進入rman里recover rman target / recover database; ============================================================================ 4.3 處理online redo
因為此時另一個節點還沒有配好,所以我們只能在執行恢復的節點上處理redo。
[oracle@rac1 backup]$ sqlplus / as sysdba;
sql*plus: release 10.2.0.4.0 - production on thu may 19 12:19:08 2011
copyright (c) 1982, 2007, oracle.? all rights reserved.
connected to: oracle database 10g enterprise edition release 10.2.0.4.0 - production with the partitioning, real application clusters, olap, data mining and real application testing options
sys@anqing1(rac1)> set wrap off; sys@anqing1(rac1)> select * from v$logfile; rows will be truncated
group# status? type? ? member ---------- ------- ------- ----------------------------------------------------- 3? ? ? ? ?online? /u01/app/oracle/oradata/anqing/redo03.log 2? ? ? ? ?online? /u01/app/oracle/oradata/anqing/redo02.log 1? ? ? ? ?online? /u01/app/oracle/oradata/anqing/redo01.log
sys@anqing1(rac1)>alter database rename file '/u01/app/oracle/oradata/anqing/redo01.log' to '+data/anqing/onlinelog/redo02.log'; sys@anqing1(rac1)> alter database rename file '/u01/app/oracle/oradata/anqing/redo02.log' to '+data/anqing/onlinelog/redo02.log'; sys@anqing1(rac1)> alter database rename file '/u01/app/oracle/oradata/anqing/redo03.log' to '+data/anqing/onlinelog/redo03.log';
sys@anqing1(rac1)> select * from v$logfile; rows will be truncated
group# status? type? ? member ---------- ------- ------- ----------------------------------------------------- 3? ? ? ? ?online? +data/anqing/onlinelog/redo03.log 2? ? ? ? ?online? +data/anqing/onlinelog/redo02.log 1? ? ? ? ?online? +data
asmcmd> pwd +data/anqing/onlinelog asmcmd> ls asmcmd>
注意這個時候,對應目錄還是空的,當我們open db 的時候,oracle 會自動創建online redo log。我們這里修改的目的就是改變online redo 的位置。 有可能遇到需要恢復redo的情況,可以執行下面的命令,為了避免恢復redo,在備份前我們要多切換幾次redo ALTER DATABASE CLEAR LOGFILE '+DATA/dg1/onlinelog/redo01.log';
4.4 創建節點2的undo 表空間
sys@anqing1(rac1)> show parameter undo_tablespace
name? ? ? ? ? ? ? ? ? ?type? ? ? ? value ------------------------------------ ----------- ------------------------------ undo_tablespace? ? ? ? ? ? string? ? ? undotbs1
這個是rac1上節點的信息,我們在之前的在spfile參數指定的rac2節點的undo 空間是undotbs2. 所以這里我們創建該undo 表空間,并指定相關參數。
sys@anqing1(rac1)> create undo tablespace undotbs2 datafile '+data/anqing/datafile/undotbs02.dbf' size 500m; tablespace created. --這里我們直接指定別名 asmcmd> pwd +data/anqing/datafile asmcmd> ls sysaux.275.751548237 system.276.751548261 undotbs1.274.751548233 undotbs2.281.751559213 users.273.751548233 sysaux01.dbf system01.dbf undotbs01.dbf undotbs02.dbf
sys@anqing1(rac1)> alter system set undo_tablespace='undotbs2' scope=spfile sid='anqing2'; system altered.
4.5 添加rac2 節點的redo 文件 rac 的redo 是接其他節點來的,我們之前的rac1上已經有3組,所以我們這里從4開始,在添加2組給rac2,使用thread 2.
sys@anqing1(rac1)> alter database add logfile thread 2 group 4 '+data' size 100m; database altered. sys@anqing1(rac1)>? alter database add logfile thread 2 group 5 '+data' size 100m; database altered. sys@anqing1(rac1)> alter database enable thread 2; database altered.
4.6 ?重啟節點1和節點2 上的實例,使相關參數生效
節點1: sys@anqing1(rac1)> shutdown immediate database closed. database dismounted. oracle instance shut down. sys@anqing1(rac1)> startup oracle instance started.
total system global area? 285212672 bytes fixed size? ? ? ? ? ? ? ? ? 1267068 bytes variable size? ? ? ? ? ? ?146803332 bytes database buffers? ? ? ? ? 134217728 bytes redo buffers? ? ? ? ? ? ? ? 2924544 bytes database mounted. database opened. sys@anqing1(rac1)> show parameter cluster
name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?type? ? ? ? value ------------------------------------ ----------- ------------------------------ cluster_database? ? ? ? ? ? ? ? ? ? ? boolean? ? ?true cluster_database _instances? ? ? ? ? ?integer? ? ?2 cluster_interconnects? ? ? ? ? ? ? ? string sys@anqing1(rac1)>
節點2: [oracle@rac2 dbs]$ sqlplus / as sysdba; sql*plus: release 10.2.0.4.0 - production on thu may 19 14:50:06 2011 copyright (c) 1982, 2007, oracle.? all rights reserved. connected to an idle instance.
> startup oracle instance started.
total system global area? 285212672 bytes fixed size? ? ? ? ? ? ? ? ? 1267068 bytes variable size? ? ? ? ? ? ? 88083076 bytes database buffers? ? ? ? ? 192937984 bytes redo buffers? ? ? ? ? ? ? ? 2924544 bytes database mounted. database opened. > show parameter cluster name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?type? ? ? ? value ------------------------------------ ----------- ------------------------------ cluster_database? ? ? ? ? ? ? ? ? ? ? boolean? ? ?true cluster_database _instances? ? ? ? ? ?integer? ? ?2 cluster_interconnects? ? ? ? ? ? ? ? string

最后確認: sys@anqing1(rac1)> select instance_number,instance_name,host_name from gv$instance;
instance_number instance_name? ? host_name --------------- ---------------- ----------------------------------------------- 2 anqing2? ? ? ? ? rac2 1 anqing1? ? ? ? ? rac1
到現在已經是集群了,不過還有一些收尾的工作要做。
4.7 ?執行catclust.sql腳本來創建相關視圖 $oracle_home/rdbms/admin/catclust.sql to create cluster database specific views within the existing instance
sys@anqing1(rac1)> @$oracle_home/rdbms/admin/catclust.sql

4.8 重建temp 表空間 在恢復的時候,會自動創建temp 表空間。和一個前輩聊到過這個問題,他說這個temp 文件好像沒有起到作用。 尤其是數據量大的時候,他建議重建添加temp 數據文件。 這個還是小心為好,反正重建一些也不費什么事。但是萬一出問題,就是大麻煩。
步驟如下: sys@anqing1(rac1)> select name from v$tempfile; name -------------------------------------------------------------------------------- +data/anqing/tempfile/temp01.dbf
sys@anqing1(rac1)> alter tablespace temp add tempfile '+data/anqing/tempfile/temp02.dbf' size 100m; tablespace altered.
sys@anqing1(rac1)> select name from v$tempfile; name -------------------------------------------------------------------------------- +data/anqing/tempfile/temp01.dbf +data/anqing/tempfile/temp02.dbf
sys@anqing1(rac1)> alter database tempfile '+data/anqing/tempfile/temp01.dbf' offline; database altered.
sys@anqing1(rac1)> alter database tempfile '+data/anqing/tempfile/temp01.dbf' drop including datafiles;
database altered.
sys@anqing1(rac1)>? select name from v$tempfile; name -------------------------------------------------------------------------------- +data/anqing/tempfile/temp02.dbf
重新啟動集群,驗證集群完整性
==================================== 如果數據庫需要升級的: SQL> alter database open resetlogs upgrade; 這個時候,可能會提示是完全恢復,不需要resetlogs,如果出現這種提示就執行以下命令,直接打開數據庫:
5、升級數據庫 --對于RAC數據庫需要把cluster_database參數改為false, 因為作為cluster數據庫不會用EXCLUSIVE方式打開數據庫。 SYS@devdb11>startup nomount; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. Total System Global Area? 184549376 bytes Fixed Size? ? ? ? ? ? ? ? ? 1259864 bytes Variable Size? ? ? ? ? ? ? 83887784 bytes Database Buffers? ? ? ? ? ?96468992 bytes Redo Buffers? ? ? ? ? ? ? ? 2932736 bytes SYS@devdb11>alter system set cluster_database=false scope=spfile; System altered. SYS@devdb11>shutdown ORA-01507: database not mounted
ORACLE instance shut down. --重新用upgrade方式打開數據庫,是成功的。然后升級catalog. SYS@devdb11>startup upgrade ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. Total System Global Area? 184549376 bytes Fixed Size? ? ? ? ? ? ? ? ? 1259864 bytes Variable Size? ? ? ? ? ? ? 83887784 bytes Database Buffers? ? ? ? ? ?96468992 bytes Redo Buffers? ? ? ? ? ? ? ? 2932736 bytes Database mounted. Database opened. SQL> SPOOL patch.log SQL> @?/rdbms/admin/catupgrd.sql SQL> SPOOL OFF --檢查patch.log 文件: 發現一下錯誤都可以忽略 rac1-> grep -i "ora-" patch.log DOC>? ? The following statement will cause an "ORA-01722: invalid number" DOC>? ? The following statement will cause an "ORA-01722: invalid number" DOC>? ?The following statement will cause an "ORA-01722: invalid number" DOC>? ? The following statements will cause an "ORA-01722: invalid number" DOC>? ? The following statement will cause an "ORA-01722: invalid number" DOC>? ? The following PL/SQL block will cause an ORA-20000 error and DOC>? ? The following PL/SQL block will cause an ORA-20000 error and ORA-29558: JAccelerator (NCOMP) not installed. Refer to Install Guide for ORA-06512: at "SYS.DBMS_JAVA", line 236 以及patch.log文件的末尾各個組件的版本信息。 Component? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Status? ? ? ? ?Version? HH:MM:SS Oracle Database Server? ? ? ? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:26:07 JServer JAVA Virtual Machine? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:13:47 Oracle XDK? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:02:45 Oracle Database Java Packages? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:01:20 Oracle Text? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:01:38 Oracle XML Database? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:01:36 Oracle Real Application Clusters? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:00:02 Oracle Data Mining? ? ? ? ? ? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:00:38 OLAP Analytic Workspace? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:00:30 OLAP Catalog? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:03:45 Oracle OLAP API? ? ? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:03:05 Oracle interMedia? ? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:15:12 Spatial? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:01:22 Oracle Expression Filter? ? ? ? ? ? ? ? ? VALID? ? ? 10.2.0.2.0? 00:00:27 Oracle Enterprise Manager? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:03:35 Oracle Rule Manager? ? ? ? ? ? ? ? ? ? ? ?VALID? ? ? 10.2.0.2.0? 00:00:44 . --重啟動后,編譯失效的對象。 SYS@devdb11>select distinct status from dba_objects; STATUS ------- INVALID VALID SYS@devdb11>select status, count(*) from dba_objects group by status; STATUS? ? COUNT(*) ------- ---------- INVALID? ? ? ? 493 VALID? ? ? ? 49796 SYS@devdb11>@?/rdbms/admin/utlrp.sql TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP UTLRP_BGN? 2011-08-12 10:27:03 DOC>? ?The following PL/SQL block invokes UTL_RECOMP to recompile invalid DOC>? ?objects in the database. Recompilation time is proportional to the DOC>? ?number of invalid objects in the database, so this command may take DOC>? ?a long time to execute on a database with a large number of invalid DOC>? ?objects. DOC> DOC>? ?Use the following queries to track recompilation progress: DOC> DOC>? ?1. Query returning the number of invalid objects remaining. This DOC>? ? ? number should decrease with time. DOC>? ? ? ? ?SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6); DOC> DOC>? ?2. Query returning the number of objects compiled so far. This number DOC>? ? ? should increase with time. DOC>? ? ? ? ?SELECT COUNT(*) FROM UTL_RECOMP_COMPILED; DOC> DOC>? ?This script. automatically chooses serial or parallel recompilation DOC>? ?based on the number of CPUs available (parameter cpu_count) multiplied DOC>? ?by the number of threads per CPU (parameter parallel_threads_per_cpu). DOC>? ?On RAC, this number is added across all RAC nodes. DOC> DOC>? ?UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel DOC>? ?recompilation. Jobs are created without instance affinity so that they DOC>? ?can migrate across RAC nodes. Use the following queries to verify DOC>? ?whether UTL_RECOMP jobs are being created and run correctly: DOC> DOC>? ?1. Query showing jobs created by UTL_RECOMP DOC>? ? ? ? ?SELECT job_name FROM dba_scheduler_jobs DOC>? ? ? ? ? ? WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC> DOC>? ?2. Query showing UTL_RECOMP jobs that are running DOC>? ? ? ? ?SELECT job_name FROM dba_scheduler_running_jobs DOC>? ? ? ? ? ? WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC># PL/SQL procedure successfully completed.
TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP UTLRP_END? 2011-08-12 10:30:27
PL/SQL procedure successfully completed. DOC> The following query reports the number of objects that have compiled DOC> with errors (objects that compile with errors have status set to 3 in DOC> obj$). If the number is higher than expected, please examine the error DOC> messages reported with each object (using SHOW ERRORS) to see if they DOC> point to system misconfiguration or resource constraints that must be DOC> fixed before attempting to recompile these objects. DOC># OBJECTS WITH ERRORS ------------------- 0 DOC> The following query reports the number of errors caught during DOC> recompilation. If this number is non-zero, please query the error DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors DOC> are due to misconfiguration or resource constraints that must be DOC> fixed before objects can compile successfully. DOC># ERRORS DURING RECOMPILATION --------------------------- 0
PL/SQL procedure successfully completed. SYS@devdb11>select status, count(*) from dba_objects group by status; STATUS? ? COUNT(*) ------- ---------- VALID? ? ? ? 50290
--對于cluster 數據庫, SYS@devdb11>alter system set cluster_database=true scope=spfile; System altered. SYS@devdb11>shutdown ORA-01507: database not mounted
--啟動數據庫 srvctl start database -d devdb1
如果是按步驟來的,還要注冊數據庫 6、注冊數據庫 --在data的dg中,建一個parameterfile目錄 使用grid用戶進行創建 [grid@erptest1 ~]# export ORACEL_SID=+ASM1 [grid@erptest1 ~]# asmcmd ASMCMD> cd data/orcl ASMCMD> mkdir parameterfile --在sqlplus 中創建spfile SQL> create spfile = '+data/orcl/parameterfile/spfileorcl.ora' from pfile = '/u01/backup/oldspfile.ora';
創建完成后,在dbs中編輯initorcl1.ora內容如下 spfile='+data/orcl/parameterfile/spfileorcl.ora' 在第二節點就編輯 initorcl2.ora,內容與第一節點一樣 --注冊數據庫 使用oracle用戶進行數據庫和實例的注冊 [oracle@erptest1 ~]# srvctl add database -d orcl -o /u01/app/oracle/product/11.2.0/dbhome_1 -p +DATA/power/parameterfile/spfileorcl.ora [oracle@erptest1 ~]# srvctl add instance -d orcl -i orcl1 -n erpmytest1 [oracle@erptest1 ~]# srvctl add instance -d orcl -i orcl2 -n erpmytest2 到這個時候,所有的工作基本上就做完了,啟動數據庫就可以了! --檢驗結果 SQL> shutdown immedate [oracle@erptest1 ~]# $srvctl start database -d orcl [oracle@erptest1 ~]# $srvctl status database -d orcl Instance orcl1 is running on node orcl1 Instance orcl2 is running on node orcl2
說明:剛開始的時候,我們在這里遇到了問題,就是分別從各個節點起動數據庫,進行status是,顯示is not running,這個是由于我們恢復的數據庫,集群不認所至,只有通過srvctl來啟動,就會被認到!

總結

以上是生活随笔為你收集整理的DAGAGUARD追加归档方式迁移到rac集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。