设为首页 收藏本站
查看: 1357|回复: 0

[经验分享] ORA-12547: TNS:lost contact 错误处理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-11 14:11:23 | 显示全部楼层 |阅读模式
闲来无事,配置一下oracle数据库的随系统自动重启,查阅资料得知,主要需要配置/etc/oratab 和 rc.local。 配置oracle随系统自启动主要使用了$ORACLE_HOME/bin/dbstart文件。先把dbstart的内容贴出来,方便查看



    #!/bin/sh  
    #  
    # $Id: dbstart.sh 22-may-2008.05:05:45 arogers Exp $   
    # Copyright (c) 1991, 2008, Oracle. All rights reserved.   
    #  
      
    ###################################  
    #   
    # usage: dbstart $ORACLE_HOME  
    #  
    # This script is used to start ORACLE from /etc/rc(.local).  
    # It should ONLY be executed as part of the system boot procedure.  
    #  
    # This script will start all databases listed in the oratab file  
    # whose third field is a "Y".  If the third field is set to "Y" and  
    # there is no ORACLE_SID for an entry (the first field is a *),  
    # then this script will ignore that entry.  
    #  
    # This script requires that ASM ORACLE_SID's start with a +, and   
    # that non-ASM instance ORACLE_SID's do not start with a +.  
    #  
    # If ASM instances are to be started with this script, it cannot  
    # be used inside an rc*.d directory, and should be invoked from  
    # rc.local only. Otherwise, the CSS service may not be available  
    # yet, and this script will block init from completing the boot  
    # cycle.  
    #  
    # If you want dbstart to auto-start a single-instance database that uses  
    # an ASM server that is auto-started by CRS (this is the default behavior  
    # for an ASM cluster), you must change the database's ORATAB entry to use  
    # a third field of "W" and the ASM's ORATAB entry to use a third field of "N".  
    # These values specify that dbstart auto-starts the database only after  
    # the ASM instance is up and running.  
    #  
    # Note:  
    # Use ORACLE_TRACE=T for tracing this script.  
    #  
    # The progress log for each instance bringup plus Error and Warning message[s]  
    # are logged in file $ORACLE_HOME/startup.log. The error messages related to   
    # instance bringup are also logged to syslog (system log module).  
    # The Listener log is located at $ORACLE_HOME_LISTNER/listener.log  
    #   
    # On all UNIX platforms except SOLARIS  
    # ORATAB=/etc/oratab  
    #  
    # To configure, update ORATAB with Instances that need to be started up  
    #    Entries are of the form:  
    #    $ORACLE_SID:$ORACLE_HOME:<N|Y|W>:  
    #    An example entry:  
    #    main:/usr/lib/oracle/emagent_10g:Y  
    #  
    # Overall algorithm:  
    # 1) Bring up all ASM instances with 'Y' entry in status field in oratab entry  
    # 2) Bring up all Database instances with 'Y' entry in status field in  
    #    oratab entry  
    # 3) If there are Database instances with 'W' entry in status field  
    #    then  
    #      iterate over all ASM instances (irrespective of 'Y' or 'N') AND  
    #      wait for all of them to be started  
    #    fi  
    # 4) Bring up all Database instances with 'W' entry in status field in  
    #    oratab entry  
    #  
    #####################################  
      
    LOGMSG="logger -puser.alert -s "  
      
    trap 'exit' 1 2 3  
      
    # for script tracing  
    case $ORACLE_TRACE in  
      T) set -x ;;  
    esac  
         
    # Set path if path not set (if called from /etc/rc)  
    SAVE_PATH=/bin:/usr/bin:/etc:${PATH} ; export PATH  
    SAVE_LLP=$LD_LIBRARY_PATH  
      
    # First argument is used to bring up Oracle Net Listener  
    ORACLE_HOME_LISTNER=$1  
    if [ ! $ORACLE_HOME_LISTNER ] ; then  
      echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"  
      echo "Usage: $0 ORACLE_HOME"  
    else  
      LOG=$ORACLE_HOME_LISTNER/listener.log  
      
      # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to  
      # a different ORACLE_HOME for each entry in the oratab.  
      export ORACLE_HOME=$ORACLE_HOME_LISTNER  
      
      # Start Oracle Net Listener  
      if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then  
        echo "$0: Starting Oracle Net Listener" >> $LOG 2>&1  
        $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &  
        VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`  
        export VER10LIST  
      else  
        echo "Failed to auto-start Oracle Net Listener using $ORACLE_HOME_LISTNER/bin/tnslsnr"  
      fi  
    fi  
      
    # Set this in accordance with the platform  
    ORATAB=/etc/oratab  
    if [ ! $ORATAB ] ; then  
      echo "$ORATAB not found"  
      exit 1;  
    fi  
      
    # Checks Version Mismatch between Listener and Database Instance.  
    # A version 10 listener is required for an Oracle Database 10g database.  
    # Previous versions of the listener are not supported for use with an Oracle  
    # Database 10g database. However, it is possible to use a version 10 listener  
    # with previous versions of the Oracle database.  
    checkversionmismatch() {  
      if [ $VER10LIST ] ; then  
        VER10INST=`sqlplus -V | grep "Release " | cut -d' ' -f3 | cut -d'.' -f1`  
        if [ $VER10LIST -lt $VER10INST ] ; then  
          $LOGMSG "Listener version $VER10LIST NOT supported with Database version $VER10INST"  
          $LOGMSG "Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER:"  
          $LOGMSG "lsnrctl start"  
        fi  
      fi  
    }  
      
    # Starts a Database Instance  
    startinst() {  
      # Called programs use same database ID  
      export ORACLE_SID  
      
      # Put $ORACLE_HOME/bin into PATH and export.  
      PATH=$ORACLE_HOME/bin:${SAVE_PATH} ; export PATH  
      # add for bug # 652997  
      LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${SAVE_LLP} ; export LD_LIBRARY_PATH  
      PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora  
      SPFILE=${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora  
      SPFILE1=${ORACLE_HOME}/dbs/spfile.ora  
      
      echo ""  
      echo "$0: Starting up database \"$ORACLE_SID\""  
      date  
      echo ""  
      
      checkversionmismatch  
      
      # See if it is a V6 or V7 database  
      VERSION=undef  
      if [ -f $ORACLE_HOME/bin/sqldba ] ; then  
        SQLDBA=sqldba  
        VERSION=`$ORACLE_HOME/bin/sqldba command=exit | awk '  
          /SQL\*DBA: (Release|Version)/ {split($3, V, ".") ;  
          print V[1]}'`  
        case $VERSION in  
          "6") ;;  
          *) VERSION="internal" ;;  
        esac  
      else  
        if [ -f $ORACLE_HOME/bin/svrmgrl ] ; then  
          SQLDBA=svrmgrl  
          VERSION="internal"  
        else  
          SQLDBA="sqlplus /nolog"  
        fi  
      fi  
      
      STATUS=1  
      if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.dbf ] ; then  
        STATUS="-1"  
      fi  
      if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.ora ] ; then  
        STATUS="-1"  
      fi  
      pmon=`ps -ef | grep -w "ora_pmon_$ORACLE_SID"  | grep -v grep`  
      if [ "$pmon" != "" ] ; then  
        STATUS="-1"  
        $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" already started."  
      fi  
      
      if [ $STATUS -eq -1 ] ; then  
        $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" possibly left running when system went down (system crash?)."  
        $LOGMSG "Action: Notify Database Administrator."  
        case $VERSION in  
          "6")  sqldba "command=shutdown abort" ;;  
          "internal")  $SQLDBA $args <<EOF  
    connect internal  
    shutdown abort  
    EOF  
            ;;  
          *)  $SQLDBA $args <<EOF  
    connect / as sysdba  
    shutdown abort  
    quit  
    EOF  
            ;;  
        esac  
      
        if [ $? -eq 0 ] ; then  
          STATUS=1  
        else  
          $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."  
        fi  
      fi  
      
      if [ $STATUS -eq 1 ] ; then  
        if [ -e $SPFILE -o -e $SPFILE1 -o -e $PFILE ] ; then  
          case $VERSION in  
            "6")  sqldba command=startup ;;  
            "internal")  $SQLDBA <<EOF   
    connect internal  
    startup  
    EOF  
              ;;  
            *)  $SQLDBA <<EOF   
    connect / as sysdba  
    startup  
    quit  
    EOF  
              ;;  
          esac  
      
          if [ $? -eq 0 ] ; then  
            echo ""   
            echo "$0: ${INST} \"${ORACLE_SID}\" warm started."   
          else  
            $LOGMSG ""   
            $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."   
          fi  
        else  
          $LOGMSG ""   
          $LOGMSG "No init file found for ${INST} \"${ORACLE_SID}\"."   
          $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."   
        fi  
      fi  
    }  
      
    # Starts an ASM Instance  
    startasminst() {  
      # Called programs use same database ID  
      export ORACLE_SID  
      ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  
      # Called scripts use same home directory  
      export ORACLE_HOME  
      
      # For ASM instances, we have a dependency on the CSS service.  
      # Wait here for it to become available before instance startup.  
      
      # Is the 10g install intact? Are all necessary binaries present?  
      if [ ! -x $ORACLE_HOME/bin/crsctl ]; then  
        $LOGMSG "$ORACLE_HOME/bin/crsctl not found when attempting to start"  
        $LOGMSG "  ASM instance $ORACLE_SID."  
      
      else   
        COUNT=0  
        $ORACLE_HOME/bin/crsctl check css  
        RC=$?  
        while [ "$RC" != "0" ];  
          do  
          COUNT=`expr $COUNT + 1`  
          if [ $COUNT = 15 ] ; then  
            # 15 tries with 20 sec interval => 5 minutes timeout  
            $LOGMSG "Timed out waiting to start ASM instance $ORACLE_SID"           
            $LOGMSG "  CSS service is NOT available."  
            exit $COUNT  
          fi  
          $LOGMSG "Waiting for Oracle CSS service to be available before starting "  
          $LOGMSG " ASM instance $ORACLE_SID. Wait $COUNT."  
          sleep 20  
          $ORACLE_HOME/bin/crsctl check css  
          RC=$?  
        done  
      fi  
      startinst  
    }  
      
    # Start of dbstartup script  
    #  
    # Loop for every entry in oratab file and and try to start  
    # that ORACLE.  
    #  
    # ASM instances need to be started before 'Database instances'  
    # ASM instance is identified with '+' prefix in ORACLE_SID  
    # Following loop brings up ASM instance[s]  
      
    cat $ORATAB | while read LINE  
    do  
    case $LINE in  
      \#*)                ;;        #comment-line in oratab  
      *)  
      ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
      if [ "$ORACLE_SID" = '*' ] ; then  
        # same as NULL SID - ignore this entry  
        ORACLE_SID=""  
        continue  
      fi  
      # Proceed only if last field is 'Y'.  
      if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then  
        # If ASM instances  
        if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then  
          INST="ASM instance"  
          ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  
          # Called scripts use same home directory  
          export ORACLE_HOME  
          # file for logging script's output  
          LOG=$ORACLE_HOME/startup.log  
          touch $LOG  
          chmod a+r $LOG  
          echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"  
          startasminst >> $LOG 2>&1  
        fi  
      fi  
      ;;  
    esac  
    done  
      
    # exit if there was any trouble bringing up ASM instance[s]  
    if [ "$?" != "0" ] ; then  
      exit 2  
    fi  
      
    #  
    # Following loop brings up 'Database instances'  
    #  
    cat $ORATAB | while read LINE  
    do  
    case $LINE in  
      \#*)                ;;        #comment-line in oratab  
      *)  
      ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
      if [ "$ORACLE_SID" = '*' ] ; then  
        # same as NULL SID - ignore this entry  
        ORACLE_SID=""  
        continue  
      fi  
      # Proceed only if last field is 'Y'.  
      if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then  
        # If non-ASM instances  
        if [ `echo $ORACLE_SID | cut -b 1` != '+' ]; then  
          INST="Database instance"  
          ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  
          # Called scripts use same home directory  
          export ORACLE_HOME  
          # file for logging script's output  
          LOG=$ORACLE_HOME/startup.log  
          touch $LOG  
          chmod a+r $LOG  
          echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"  
          startinst >> $LOG 2>&1  
        fi  
      fi  
      ;;  
    esac  
    done  
      
    #  
    # Following loop brings up 'Database instances' that have wait state 'W'  
    #  
    cat $ORATAB | while read LINE  
    do  
    case $LINE in  
      \#*)                ;;        #comment-line in oratab  
      *)  
      ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
      if [ "$ORACLE_SID" = '*' ] ; then  
        # same as NULL SID - ignore this entry  
        ORACLE_SID=""  
        continue  
      fi  
      # Proceed only if last field is 'W'.  
      if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then  
        W_ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
        # DB instances with 'W' (wait state) have a dependency on ASM instances via CRS.  
        # Wait here for 'all' ASM instances to become available.  
        cat $ORATAB | while read LINE  
        do  
        case $LINE in  
          \#*)                ;;        #comment-line in oratab  
          *)  
          ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
          if [ "$ORACLE_SID" = '*' ] ; then  
            # same as NULL SID - ignore this entry  
            ORACLE_SID=""  
            continue  
          fi  
          if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then  
            INST="ASM instance"  
            ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  
            if [ -x $ORACLE_HOME/bin/srvctl ] ; then  
              COUNT=0  
              NODE=`olsnodes -l`  
              RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID is running"`  
              RC=$?  
              while [ "$RC" != "0" ]; # wait until this comes up!  
              do  
                COUNT=$((COUNT+1))  
                if [ $COUNT = 5 ] ; then  
                  # 5 tries with 60 sec interval => 5 minutes timeout  
                  $LOGMSG "Error: Timed out waiting on CRS to start ASM instance $ORACLE_SID"           
                  exit $COUNT  
                fi  
                $LOGMSG "Waiting for Oracle CRS service to start ASM instance $ORACLE_SID"  
                $LOGMSG "Wait $COUNT."  
                sleep 60  
                RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID is running"`  
                RC=$?  
              done  
            else  
              $LOGMSG "Error: \"${W_ORACLE_SID}\" has dependency on ASM instance \"${ORACLE_SID}\""  
              $LOGMSG "Error: Need $ORACLE_HOME/bin/srvctl to check this dependency"  
            fi  
          fi     # asm instance  
          ;;  
        esac  
        done # innner while  
      fi  
      ;;  
    esac  
    done # outer while  
      
    # by now all the ASM instances have come up and we can proceed to bring up  
    # DB instance with 'W' wait status  
      
    cat $ORATAB | while read LINE  
    do  
    case $LINE in  
      \#*)                ;;        #comment-line in oratab  
      *)  
      ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  
      if [ "$ORACLE_SID" = '*' ] ; then  
        # same as NULL SID - ignore this entry  
        ORACLE_SID=""  
        continue  
      fi  
      # Proceed only if last field is 'W'.  
      if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then  
        INST="Database instance"  
        if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then  
          $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started"  
          $LOGMSG "Error: incorrect usage: 'W' not allowed for ASM instances"  
          continue  
        fi  
        ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  
        # Called scripts use same home directory  
        export ORACLE_HOME  
        # file for logging script's output  
        LOG=$ORACLE_HOME/startup.log  
        touch $LOG  
        chmod a+r $LOG  
        echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"  
        startinst >> $LOG 2>&1  
      fi  
      ;;  
    esac  
    done  

从上面可以看出,oracle是通过rc.local来自启动的,启动的过程中会检测/etc/oratab来决定启动哪个实例。废话少说,动起来先,配置 rc.local文件如下



    [iyunv@yue rc.d]# cat rc.local                                                                                                                  
    #!/bin/bash                                                                                                                                    
    su - oraele -c "/home/app/oraele/product/11.2.0/db_1/bin/dbstart $ORACLE_HOME"  

配置/etc/oratab文件如下



    [iyunv@yue rc.d]# cat /etc/oratab   
    #                                                                                                                                               
                                                                                                                                                   
                                                                                                                                                   
                                                                                                                                                   
    # This file is used by ORACLE utilities.  It is created by root.sh                                                                              
    # and updated by the Database Configuration Assistant when creating                                                                             
    # a database.                                                                                                                                   
                                                                                                                                                   
    # A colon, ':', is used as the field terminator.  A new line terminates                                                                        
    # the entry.  Lines beginning with a pound sign, '#', are comments.  
    #  
    # Entries are of the form:  
    #   $ORACLE_SID:$ORACLE_HOME:<N|Y>:  
    #  
    # The first and second fields are the system identifier and home  
    # directory of the database respectively.  The third filed indicates  
    # to the dbstart utility that the database should , "Y", or should not,  
    # "N", be brought up at system boot time.  
    #  
    # Multiple entries with the same $ORACLE_SID are not allowed.  
    #  
    #  
    oraten:/home/app/oraten/product/10.2.0/db_1:Y  
    oraele:/home/app/oraele/product/11.2.0/db_1:Y  

oraten和oraele分别属于用户oraten 和oraele,用户属性如下:



    [iyunv@yue rc.d]# id oraten  
    uid=1001(oraten) gid=1002(oinstall) 组=1002(oinstall),1001(dba)  
    [iyunv@yue rc.d]# id oraele  
    uid=1522(oraele) gid=1002(oinstall) 组=1002(oinstall),1001(dba)  


手工测试dbstart脚本能否正常执行,



    [oraele@yue ~]$ dbstart $ORACLE_HOME  

问题出现了,只有oraele实例启动,初步估计是用户权限的问题,在oraele用户下,设置oraten用户的环境变量,然后启动sqlplus,报如下错误:



    oraele@yue db_1]$ ./bin/sqlplus /nolog  
      
    SQL*Plus: Release 10.2.0.5.0 - Production on 星期四 12月 4 14:13:30 2014  
      
    Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.  
      
    SQL> conn / as sysdba  
    ERROR:  
    ORA-12547: TNS:lost contact  


网络搜集资料如下:

1:缺少必要安装包,glibc glibc-devel libaio libaio-devel

2:$ORACLE_HOME/bin/oracle文件的权限不对

3:系统内核配置不正确,如文件数量限制等

4:环境变量设置不正确

5:检查$ORACLE_HOME/bin/oracle 和 $ORACLE_HOME/rdbms/lib/config.o 的文件大小是否为0,若为0需要重新编译

经查看oacle文件的权限不对,当前设置为:



    [oraele@yue bin]$ ll oracle  
    -rwxrwxr-x 1 oraten oinstall 125155528 8月  19 21:07 oracle  

修改如下:



    [iyunv@yue bin]# chmod 6751 oracle  
    [iyunv@yue bin]# ll oracle  
    -rwsr-s--x 1 oraten oinstall 125155528 8月  19 21:07 oracle  

文件权限的详细说明如下:



    u:User,即文件或目录的拥有者。  
    g:Group,即文件或目录的所属群组。  
    o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。  
    a:All,即全部的用户,包含拥有者,所属群组以及其他用户。  
    有关权限代号的部分,列表于下:  
    r:读取权限,数字代号为"4"。  
    w:写入权限,数字代号为"2"。  
    x:执行或切换权限,数字代号为"1"。  
    -:不具任何权限,数字代号为"0"。  
    s:当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限。  

看来oracle文件的默认权限是具有s的,而我们手工对其进行了修改,看来在安装完数据库后,即使我们执行chmod -R 777 $ORACLE_HOME的操作也可能是有问题的,

修改权限后,重启系统,一切正常




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-37865-1-1.html 上篇帖子: 关于“ORA-03113: 通信通道的文件结束” 下篇帖子: Oracle start with...connect by prior 实现递归查询 contact
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表