欢迎光临
我们一直在努力

Oracle 12.2 学习系列(一)CDB多租户容器数据库

CDB


多租户容器数据库


可插入数据库的概念

Oracle Multitenant Container Database(CDB)

,即多租户容器数据库,是

Oracle 12C

引入的特性,指的是可以容纳一个或者多个可插拔数据库的数据库,这个特性允许在

CDB

容器数据库中创建并且维护多个数据库,在

CDB

中创建的数据库被称为

PDB

,每个

PDB



CDB

中是相互独立存在的,在单独使用

PDB

时,与普通数据库无任何区别。

CDB

根容器数据库的主要作用就是容纳所有相关的

PDB

的元数据,以及在

CDB

中对所有的

PDB

进行管理。


多租户环境的组成

ROOT


容器数据库

Root

容器数据库,是

CDB

环境中的根数据库,在根数据库中含有主数据字典视图,其中包含了与

Root

容器有关的元数据和

CDB

中所包含的所有的

PDB

信息。在

CDB

环境中被标识为

CDB$ROOT




每个





CDB




环境中只能有一个


Root




容器数据库




CDB seed

CDB seed



PDB

的种子,其中提供了数据文件,在

CDB

环境中被标识为

PDB$SEED

,是创建新的

PDB

的模板,你可以连接

PDB$SEED

,但是不能执行任何事物,因为



PDB$SEED




是只读的



,不可进行修改。

PDBs

PDB

数据库,在

CDB

环境中每个

PDB

都是独立存在的,与传统的

Oracle

数据库基本无差别,每个

PDB

拥有自己的数据文件和

objects

,唯一的区别在于

PDB

可以插入到

CDB

中,以及在

CDB

中拔出,并且在任何一个时间点之上

PDB

必须拔出或者插入到一个

CDB

中,当用户链接

PDB

时不会感觉到根容器和其他

PDB

的存在。



数据库

CDB





PDB



结构图

 


通过以下的命令查询当前数据库中的

pdb


SQL> show pdbs
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        MOUNTED
SQL>


其中

PDB$SEED



CDB seed



ORCLPDB



PDB

数据库。

Application Containers




12cR2

版本中

,Oracle

对多租户功能进行了增强,在

CDB root

容器中可以创建一个叫做

Application root

的容器,可在其内创建多个依赖于

Application root



Application PDBs

,架构图如下:


12c R2 CDB





PDB



结构图(新增

Application Containers





 

CDB


环境中的用户

CDB

环境中包含两类用户,公用用户和本地用户。


公用用户


创建公用用户


公用用户是在

root

容器数据库中和所有的

PDB

数据库中都存在的用户,

公用用户必须在根容器中创建

,然后此用户会在所有的现存的

PDB

中自动创建,

公用用户标识必须以



c##



或者

C##



开头





sys



system

用户是

Oracle



CDB

环境中自动创建的公用用户。


举例:


创建语句为:

SQL> create user c##mytest1 identified by mytest1;
        
User created.


小结:


(1)

    



公用用户在


root


容器中创建


(2)

    



公用用户名称比较特殊,要以


c##


或者


C##


开头


公用用户赋权


创建完成公用用户,需要为公用用户赋予所有可插拔数据库的权限,公用用户才可以访问其他

PDB

,如果在连接根容器时仅仅为公用用户赋予了相关权限,那么该权限不会被传递到所有的可插拔数据库中,必须为公用用户赋予能够传递到

PDB

中的权限,可以创建公用角色然后赋予公用用户,或者在为公共用户付权时指定子句

container=ALL;


小结:


(1)

      



公用用户要连接


pdb


需要赋予对应权限


(2)

      



赋予的权限方式可以是加


container=all(





container=pdb)


;也可以通过赋予


role


角色权限。


举例:


赋予

c##mytest1

用户基本的连接权限。

SQL> grant resource,connect to c##mytest1;
 
Grant succeeded.
 
SQL>
SQL> exit


测试

”c##mytest1”

用户的登录情况,可以正常登录

[oracle@linux14 ~]$ sqlplus /nolog
 
SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:01:30 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
SQL> conn c##mytest1/mytest1;
Connected.
SQL>

 


在没有赋予的访问

pdb

的相关权限下,登录失败

SQL> alter session set container=orclpdb;
ERROR:
ORA-01031: insufficient privileges
 
 
SQL>



赋予


c##mytest1




用户


pdb




访问权限的


2




种方式




1

)在赋权的时候加

container=all
[oracle@linux14 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:08:15 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
 
SQL> grant resource,connect to c##mytest1 container=all;
 
Grant succeeded.
 
SQL> conn c##mytest1/mytest1
Connected.
SQL>
SQL> alter session set container=orclpdb;
 
Session altered.
 
SQL>



2

)赋予已有的角色权限

1.

创建

c##mytestprivs

的角色

–>

2.

赋予

resource,connect

权限

–>

3.

然后把

c##mytestprivs

赋予

c##mytest1–>

4.

然后

c##mytest1

就可以正常登录

pdb

[oracle@linux14 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:19:16 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
 
SQL>
SQL> create role c##mytestprivs container=all;
 
Role created.
 
SQL> grant resource,connect to c##mytestprivs container=all;
 
Grant succeeded.
 
SQL> grant c##mytestprivs to c##mytest1 container=all;
 
Grant succeeded.
 
SQL>
SQL> conn c##mytest1/mytest1
Connected.
SQL>
SQL> show user
USER is "C##MYTEST1"
SQL>
SQL> alter session set container=orclpdb;
 
Session altered.
 
SQL>


本地用户


本地用户指的是在

PDB

中创建的普通用户,只有在创建它的

PDB

中才会存在该用户,并且

PDB

中只能创建本地用户。此用户跟普通数据库中的用户一样。

12.2


中关于

CDB

你需要了解的基础知识

SYSTEM/SYSAUX


表空间


SYSTEM





SYSAUX



表空间是独立的



,在

PDB



root

容器数据库中各自拥有,并非共用。

 




CDB$ROOT

容器数据库中查询结果:

SQL> show con_id con_name user;                  
 
CON_ID
------------------------------
1
 
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
SQL>
SQL>
SQL> select tablespace_name,file_name from dba_data_files;
 
TABLESPACE_NAME                FILE_NAME
------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USERS                          /data/oradata/orcl/users01.dbf
UNDOTBS1                       /data/oradata/orcl/undotbs01.dbf
SYSTEM                         /data/oradata/orcl/system01.dbf
SYSAUX                         /data/oradata/orcl/sysaux01.dbf




orclpdb



pdb

数据库中查询结果为:

SQL> alter session set container=orclpdb;
 
Session altered.
 
SQL> show con_id con_name user;
 
CON_ID
------------------------------
3
 
CON_NAME
------------------------------
ORCLPDB
USER is "SYS"
SQL>
SQL> select tablespace_name,file_name from dba_data_files;
 
TABLESPACE_NAME                FILE_NAME
------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UNDOTBS1                       /data/oradata/orcl/orclpdb/undotbs01.dbf
SYSAUX                         /data/oradata/orcl/orclpdb/sysaux01.dbf
SYSTEM                         /data/oradata/orcl/orclpdb/system01.dbf
USERS                          /data/oradata/orcl/orclpdb/users01.dbf
 
SQL>

REDO


文件




1




redo



日志文件为公用的



,存在于

root

容器中

CDB$ROOT



REDO

中的条目标识

REDO

是来自哪个

PDB





2

)在

PDB

中无法执行

ALTER SYSTEM SWITCH LOGFILE

命令,只有公用用户在

ROOT

容器中才可以执行该命令。

SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

   (3)

      


另外

ALTER SYSTEM CHECKPOINT

命令是可以在

PDB

中执行的。

SQL> alter system checkpoint;
 
System altered.
 
SQL>






    


归档日志是公用的




CDB

环境中所有的

PDB

共用

CDB

的归档模式,以及归档文件,不可以单独为

PDB

设置自己的归档模式,只有特权用户连接根容器之后才可以启动归档模式。

UNDO MODE- -UNDO


表空间

(1)

      




12.2

之前的版本中,所有的

PDB

共用

CDB$ROOT

中的

UNDO

文件

(2)

      




12.2

之后的版本中

UNDO

的使用模式有两种:

SHARED UNDO MODE



LOCAL UNDO MODE

,顾名思义,

LOCAL UNDO MODE

就是每个

PDB

使用自己的

UNDO

表空间,但当

PDB

中没有自己的

UNDO

表空间时,会使用

CDB$ROOT

中的公共

UNDO

表空间。

 


查看

UNDO

表空间的使用模式

(CDB$ROOT)


SQL> COL PROPERTY_NAME FOR A50
SQL> COL PROPERTY_VALUE FOR A50
SQL> COL DESCRIPTION FOR A50
SQL>
SQL> SELECT property_name, property_value
  2  FROM database_properties
  3  WHERE property_name='LOCAL_UNDO_ENABLED';
 
PROPERTY_NAME                                      PROPERTY_VALUE
-------------------------------------------------- --------------------------------------------------
LOCAL_UNDO_ENABLED                                 TRUE
 
SQL>

关闭

Local UNDO (

操作需要重启数据库

)


直接关闭

local undo

会报错:

SQL> alter database local undo off;
alter database local undo off
*
ERROR at line 1:
ORA-65192: database must be in UPGRADE mode for this operation


关闭数据库,启动到

upgrade

模式下关闭

local undo

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup upgrade
ORACLE instance started.
 
Total System Global Area 1241513984 bytes
Fixed Size                  8792248 bytes
Variable Size             788531016 bytes
Database Buffers          436207616 bytes
Redo Buffers                7983104 bytes
Database mounted.
Database opened.
SQL>
SQL> alter database local undo off;
 
Database altered.


重启数据库后,查询

local undo

已经关闭了

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
 
Total System Global Area 1241513984 bytes
Fixed Size                  8792248 bytes
Variable Size             788531016 bytes
Database Buffers          436207616 bytes
Redo Buffers                7983104 bytes
Database mounted.
Database opened.
SQL>
SQL> SELECT property_name, property_value
  2  FROM database_properties
  3  WHERE property_name='LOCAL_UNDO_ENABLED';
 
PROPERTY_NAME                                      PROPERTY_VALUE
-------------------------------------------------- --------------------------------------------------
LOCAL_UNDO_ENABLED                                 FALSE
 
SQL>

开启

local UNDO(

操作需要重启数据库

)


直接开启

local undo

也会报错

                                                                                                                                                                                               

SQL> alter database local undo on;                                                                  
alter database local undo on                                                                        
*                                                                                                    
ERROR at line 1:                                                                                    
ORA-65192: database must be in UPGRADE mode for this operation


重启数据库到

upgrade

模式,然后关闭

local undo                                                                   

SQL> shutdown immediate;                                                                            
Database closed.                                                                                    
Database dismounted.                                                                                
ORACLE instance shut down.                                                                          
SQL>                                                                                                 
SQL> startup upgrade                                                                                
ORACLE instance started.                                                                            
                                                                                                     
Total System Global Area 1241513984 bytes                                                           
Fixed Size                  8792248 bytes                                                            
Variable Size             788531016 bytes                                                           
Database Buffers          436207616 bytes                                                           
Redo Buffers                7983104 bytes                                                           
Database mounted.                                                                                   
Database opened.                                                                                     
SQL>                                                                                                
SQL> alter database local undo on;                                                                  
                                                                                                     
Database altered.


再次重启数据库,查询

local undo

的开启状态

                                                                                                      

SQL> shutdown immediate;                                                                            
Database closed.                                                                                     
Database dismounted.                                                                                
ORACLE instance shut down.                                                                          
SQL> startup                                                                                         
ORACLE instance started.                                                                            
                                                                                                     
Total System Global Area 1241513984 bytes                                                           
Fixed Size                  8792248 bytes                                                           
Variable Size             788531016 bytes                                                           
Database Buffers          436207616 bytes                                                           
Redo Buffers                7983104 bytes                                                            
Database mounted.                                                                                   
Database opened.                                                                                    
SQL>                                                                                                
SQL> SELECT property_name, property_value                                                           
  2  FROM database_properties                                                                        
  3  WHERE property_name='LOCAL_UNDO_ENABLED';                                                      
                                                                                                    
PROPERTY_NAME                                      PROPERTY_VALUE                                   
-------------------------------------------------- --------------------------------------------------
LOCAL_UNDO_ENABLED                                 TRUE                                              
                                                                                                    
SQL>


临时文件




1



默认情况下临时表空间也是独立的



PDB



root

容器数据库各自拥有,




2

)如果

PDB

没有自己的临时表空间文件,那么,

PDB

可以使用

CDB$ROOT

中的临时表空间。


参数文件



参数文件是公用的

(1)

      


参数文件中只记录了根容器的参数信息,没有记录

PDB

级别的参数信息,在根容器中修改初始化参数,会被继承到所有的

PDB

中,

(2)

      




PDB

中修改参数后,

PDB

的参数会覆盖

CDB

级别的参数,

PDB

级别的参数记录在根容器的

pdb_spfile$

视图中,但并不是所有的参数都可以在

PDB

中修改,

(3)

      


可以通过

v$system_parameter

视图查看

PDB

中可修改的参数:

SELECT name FROM v$system_parameter
WHERE ispdb_modifiable = 'TRUE'
ORDER BY name;


控制文件



控制文件是公用的

CDB

环境中只有一组控制文件,所有的

PDB

共用这组公共的控制文件,从任何

PDB

中添加数据文件都会记录到公共控制文件当中,公用用户连接根容器时,可对控制文件进行管理。

SQL> show parameter control_files;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /data/oradata/orcl/control01.c
                                                 tl, /data/flash_recovery_area/
                                                 orcl/control02.ctl
SQL>


告警日志以及跟踪文件



告警日志和跟踪文件是公用的




CDB

中所有的

PDB

共用一个告警日志和一组跟踪文件,所有的

PDB

告警信息都会写入同一个告警日志中。


时区




CDB

环境中可以为

CDB

以及所有的

PDB

设置相同的时区,也可以为每个

PDB

设置单独的时区。


查询时区语句:

SQL> select dbtimezone from dual;
 
DBTIME
------
+00:00


字符集




CDB

中定义字符集也可以应用于它所含有的

PDB

中,每个

PDB

也可以有自己的字符集设置。


查询字符集的语句:

SELECT a.value || '_' || b.value || '.' || c.value NLS_LANG
  FROM nls_database_parameters a,
       nls_database_parameters b,
       nls_database_parameters c
 WHERE a.parameter = 'NLS_LANGUAGE'
   AND b.parameter = 'NLS_TERRITORY'
   AND c.parameter = 'NLS_CHARACTERSET';


数据字典视图与动态性能视图

(1)

      




CDB

环境中引入了

CDB

级别的数据字典视图,它的级别高于

DBA_/ALL_/USER_



CDB

级别的数据字典视图含有所有

PDB

的元数据信息,其中增加了

con_id

列,

con_id



CDB

中所有容器唯一标识符,

(2)

      


其中

con_id




的是

CDB$ROOT



con_id



2

的是

PDB$SEED

,每个

PDB



CDB

中都会分配一个唯一的

con_id


(3)

      


如果要想查看

CDB

级别的数据字典视图,必须使用公用用户在跟容器中查看,并且要查看的

PDB

必须处于

open

状态,才可以看到

PDB

中的信息。

CDB


的操作和管理


管理

CDB

通常也是使用

sys

用户,其连接和操作方式跟非

CDB

数据库相同。


登录

CDB




PDB

数据库的方法




oracle 12c

中使用

tnsname

的方式来进行登录

CDB



PDB

tnsnames.ora

的举例配置

[oracle@linux14 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/app/oracle/product/12c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 
LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))
 
 
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
 
ORCLPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb)
    )
  )


其中的

ORCL

的配置是用于登录

CDB



cdb$root

容器数据库

ORCLPDB

的配置是用于登录

PDB



orclpdb

数据库

 


使用

orcl

来登录

cdb$root

数据库:

[oracle@linux14 admin]$ sqlplus sys/oracle@orcl as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:13:15 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
 
SQL> show con_id con_name user;
 
CON_ID
------------------------------
1
 
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"


使用

orclpdb

来登录

pdb

数据库

[oracle@linux14 admin]$ sqlplus sys/oracle@orclpdb as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:14:37 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
 
SQL> show con_id con_name user;
 
CON_ID
------------------------------
3
 
CON_NAME
------------------------------
ORCLPDB
USER is "SYS"
SQL>


查询当前连接容器的信息:


(1)

      


方式

1

SQL> show con_id con_name user;
 
CON_ID
------------------------------
1
 
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
SQL>

(2)    

方式

2

SQL> COL CON_ID FOR A10
SQL> COL CUR_CONTAINER FOR A25
SQL> COL CUR_USER FOR A25
SQL> SELECT
  2  sys_context('USERENV','CON_ID')con_id,
  3  sys_context('USERENV','CON_NAME') cur_container,
  4  sys_context('USERENV','session_user') cur_user
  5  FROM dual;
 
CON_ID     CUR_CONTAINER             CUR_USER
---------- ------------------------- -------------------------
1          CDB$ROOT                  SYS
 
SQL>


启动和关闭

CDB


数据库


启动和关闭

CDB

数据库的方式跟普通的非

CDB

数据库一致,其中

PDB

的数据库不会随着

CDB

一起其中,只会到

mounted

状态:

[oracle@linux14 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 20:47:24 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
SQL> startup
ORACLE instance started.
 
Total System Global Area 1241513984 bytes
Fixed Size                  8792248 bytes
Variable Size             788531016 bytes
Database Buffers          436207616 bytes
Redo Buffers                7983104 bytes
Database mounted.
Database opened.
SQL>
SQL> show pdbs;
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        
MOUNTED
SQL> 
alter pluggable database orclpdb open;
 
Pluggable database altered.
 
SQL>


手工启动

PDB



open

alter pluggable database orclpdb open; -->指定某个pdb启动,比如orclpdb
alter pluggable database all open; -->所有的pdb数据库都启动



关闭

CDB

的命令:

SQL> shutdown immediate;


查询

CDB

数据库的表空间使用情况

with generator0 as
 (select cf.con_id, cf.tablespace_name, sum(cf.bytes) / 1024 / 1024 frm
    from cdb_free_space cf
   group by cf.con_id, cf.tablespace_name),
generator1 as
 (select cd.con_id, cd.tablespace_name, sum(cd.bytes) / 1024 / 1024 usm
    from cdb_data_files cd
   group by cd.con_id, cd.tablespace_name),
generator2 as
 (select g0.con_id, c.name con_name, g0.tablespace_name, g0.frm, g1.usm
    from generator0 g0, generator1 g1, v$containers c
   where g0.con_id = g1.con_id
     and g0.tablespace_name = g1.tablespace_name
     and c.con_id = g1.con_id
  union
  select c.con_id,
         c.name,
         ct.tablespace_name,
         null,
         sum(ct.bytes) / 1024 / 1024
    from v$containers c, cdb_temp_files ct
   where c.con_id = ct.con_id
   group by c.con_id, c.name, ct.tablespace_name)
select con_id,
       case
         when con_name = LAG(con_name, 1)
          OVER(PARTITION BY con_name ORDER BY tablespace_name) THEN
          null
         ELSE
          con_name
       END con_name,
       tablespace_name,
       frm || 'M' freemb,
       usm || 'M' usemb
  from generator2
 order by con_id;


结果如图所示:


切换容器的操作


正常情况下都是用

公用用户

来做操作


使用

公用用户

连接

CDB

后,可以使用

alter session

的方式切换不同的容器。


例如:

alter session set container=orclpdb;
alter session set container = cdb$root;

实验:




pdb

数据库

orclpdb

中创建了

mytest1

用户,用此用户进行切换容器,会报没有权限的错误

[oracle@linux14 admin]$ sqlplus mytest1/mytest1@orclpdb ;
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:01:09 2019
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
Last Successful login time: Tue Jan 08 2019 21:50:33 +08:00
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
 
SQL>
SQL> alter session set container=cdb$root;
ERROR:
ORA-01031: insufficient privileges


尝试用

sys

用户给

mytest1

用户赋予权限,也出现了报错

SQL> conn sys/oracle as sysdba
Connected.
SQL> show con_id user;
 
CON_ID
------------------------------
1
USER is "SYS"
SQL>
SQL>
SQL> alter session set container=orclpdb;
 
Session altered.
 
SQL>
SQL> show con_id user;
 
CON_ID
------------------------------
3
USER is "SYS"
SQL>
SQL>
SQL> grant dba to mytest1 container=all;
grant dba to mytest1 container=all
*
ERROR at line 1:
ORA-65030: cannot grant a privilege commonly to a local user or role
 
 
SQL>


因此建议,

CDB

容器数据库的操作使用公用用户来进行相关的操作。

 

 

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。