《AB学习手册》word版.doc_第1页
《AB学习手册》word版.doc_第2页
《AB学习手册》word版.doc_第3页
《AB学习手册》word版.doc_第4页
《AB学习手册》word版.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AB学习手册 目录1.硬件配置确认4a)AIX42.操作系统版本确认5a).AIX5b).HP_UX53.安装前提要求51).AIX配置:5a). posix_aio生效5b).内核参数修改5c).双机复制专用网卡的网络参数优化62).HP-UX内核参数修改64.文件系统的空间要求75.磁盘目录mount方式76.AB安装7a).altibase用户建立7b).ab目录建立及授权8c).安装包下载8d).安装8e).环境变量8f).参数配置8g).创建数据库10h).altibase用户创建107.常用的SQL语句10a).查询每个表的内存占用量10b).查询分配的内存数据量11c).确定是否运行在归档模式下的方式11d).确定当前连接机器IP12e).确定当前有哪些复制连接12f).执行检查点128.归档模式之间的切换方式129. 取得自上次checkpoint结束时,内存数据库删除的最后一个日志文件号1210.创建temp表空间1311.启动恢复1312.设置行和列大小1313.启动和关闭timing1314.保存执行命令和结果1315. DATE FORMAT定制1416.创建复制语法1417.启动或者停止复制1518.删除复制1519.增加删除复制表1520.监控脚本15A连接数据库的回话信息15B. 按照用户统计会话 每个用户的执行语句数量和状态16C. 通过会话查询产生锁的应用进程信息17D. 看哪个session在对指定表进行操作17E. 会话的锁信息17F. 查看每张表上的加锁语句数量17G. 查看表上的锁信息18H. 用户对象信息18I获取所有表的列信息18J. 查询约束条件对应关系19K.查看索引详细信息20L索引的各个字段名21M视图信息21N序列信息22O触发器22P用户权限23Q表内存信息24R内存使用信息25S. 查询复制信息25T查询复制名称、复制的表25U. 复制的发送线程状态26V. 复制对象状态26W查询复制端口、发送数量、接受数量27X查询复制积压数量、最后log file的号、复制名称27Y复制事务统计27Z语句执行统计27AA查询执行时间最长的 10 个sql28AB. 确认事务间是否有等锁:28AC. 查询锁关联的 session,query,client 等信息281. 硬件配置确认a) AIXCPU/Memory: prtconf DISK: dfNETWORK: ifconfig a no a netstat i2. 操作系统版本确认a).AIXAltibase要求AIX主机的最低配置为AIX5300-07,确认方式:Oslevel r 表示版本 patch 版本为08b).HP_UXaltibase要求HP-UX主机最低配置为HP-UX11.31 及最新补丁集# swlist -l patch | grep pthread # PHCO_38050 1.0 pthread library cumulative patch要求PHCO_38050 以上3. 安装前提要求1).AIX配置:a). posix_aio生效确认方式:lsdev C|grep posix_aio注意这里的状态为 Available,如果是Defined状态,则需要通过下面方式配置:smit Device - Asynchronous I/O - Posix Asynchronous I/O - Configure Defined Asynchronous I/O posix_aio0 Defined 改为 Available .b).内核参数修改方法一:使用 smit 工具 Users- Change / Show Characteristics of a User User NAME在上面中输入用户名称例如:altibase 后回车,修改下面的参数为-1 方法二:编辑/etc/security/limits文件, 设置default(或者ALTIBASE user): data, rss, fsize为-1 ( unlimited)修改完毕后,重新登录,确认方式:Ulimit atime(seconds)unlimited file(blocks)unlimited data(kbytes)unlimited stack(kbytes)4194304 memory(kbytes)unlimited coredump(blocks)unlimited nofiles(descriptors) unlimitedc).双机复制专用网卡的网络参数优化全局网卡设置:/usr/sbin/no -p -o tcp_sendspace=1048576/usr/sbin/no -p -o tcp_recvspace=1048576/usr/sbin/no -p -o rfc1323=1 具体网络接口设置: chdev -l en1 -a tcp_sendspace=1048576 -a rfc1323=1 -a tcp_recvspace=1048576 设置完毕,检查设置结果:Ifconfig a 或者 no l2).HP-UX内核参数修改修改下列参数: shmmax = 物理内存大小 shmmni 500 or more. Shmseg 200 or more semmni 1000 semmns 4096 semmnu = semmnisemume = semmni max_thread_proc 600 or more maxdxiz 1G ; For 32bit application, it will be applied maxdsiz_64bit Maximum DB size ; 可设置为物理内存大小 maxdsiz_64bit 参数修改完成后重启主机。设置方法:使用 sam 工具 -Kernel Configuration -t - Tunables 使用方法 #sam 输出参考如下: SMH-Kernel Configuration-Tunables (All)修改参数用 + 确认方法:kctune | grep shm 等确认 # kctune | grep shm 输出参考如下: core_addshmem_read 0 Default Immed core_addshmem_write 0 Default Immed shmmax 1073741824 Default Immed shmmni 400 Default Immed shmseg 300 Default ImmedALTIBASE 数据库使用 aCC C+编译库,所以需要安装aCC C+编译库。4.文件系统的空间要求a. altibase_home所在目录 20Gb. /alti_logs 所在目录 100Gc. /alti_dbs0,/alti_dbs1 每个大小:MEM_MAX_DB_SIZE*1.4d. /alti_archlogs 48G*天数*1.4 平均30分钟checkpoint一次,删除100个日志文件, 即 1天平均产生约4800 个日志文件,ALTIBASE 日志文件大小为 10M ,则每天需48G的空间e. /alti_hotbackup 大小MEM_MAX_DB_SIZE*天数*1.45.磁盘目录mount方式HP 环境下数据文件目录需要以 direct I/O 方式 mount设置方法: #mount -o mincache=direct,convosync=direct /dev/alti_dbs0 /alti_dbs0 #mount -o mincache=direct,convosync=direct /dev/alti_dbs1 /alti_dbs1 /alti_log 目录不能以direct I/O方式 mount确认方法:mount v6.AB安装a).altibase用户建立useradd altibasepasswd altibaseb).ab目录建立及授权mkdir /alti_dbs0 /alti_dbs1 /alti_logs /alti_archlogs /alti_hotbackupchown altibase /alti_dbs0 /alti_dbs1 /alti_logs /alti_archlogs /alti_hotbackupc).安装包下载产品包下载地址:/pkg.html下载 4.3.9.x 最新版本d).安装step1. 以altibase用户登录系统step2. 拷贝安装文件到altibase主目录下面,例如安装包文件名称为:altibase-IBM_AIX_5.3-64bit-56-release-xlC_r.tgzstep3. shell mkdir altibase_56 shell ln -s altibase_56 altibase_home shell mv *.tgz altibase_home shell cd altibase_home shell gzip -cd *.tgz | tar -xvf step4. 安装license文件,位置,$ALTIBASE_HOME/conf/license 粘贴license到该文件。该文件每一行代表一个licensee).环境变量export ALTIBASE_HOME=$HOME/altibase_home export PATH=$ALTIBASE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH_64=$ALTIBASE_HOME/lib:$LD_LIBRARY_PATH_64f).参数配置MEM_DB_DIR = /alti_dbs0 MEM_DB_DIR = /alti_dbs1 内存表数据文件的存储目录ping-pong checkpoint方式,存储 2份 DEFAULT_DISK_DB_DIR = /alti_dbs0 磁盘表数据文件的存储目录 LOGANCHOR_DIR = /alti_logs loganchor的存储目录,相当于 oracle的 control file,存储 3份 LOGANCHOR_DIR = /alti_logs LOGANCHOR_DIR = /alti_logsLOG_DIR = /alti_logs logfile的存储目录 ARCHIVE_DIR = /alti_archlogs 归档日志的存储目录 MEM_MAX_DB_SIZE = 40G(合同上允许使用的值)内存数据库的最大存储大小 SYS_DATA_TBS_INIT_SIZE = 1M ( default : 100M )磁盘表空间 SYS_TEMP_TBS_INIT_SIZE = 1M SYS_UNDO_TBS_INIT_SIZE = 1M USER_DATA_TBS_INIT_SIZE = 1M USER_TEMP_TBS_INIT_SIZE = 1M BUFFER_POOL_SIZE = 64 ( default : 16384 ) 磁盘表用的缓冲区大小 BUFFER_CHECK_POINT_INTERVAL_IN_FLUSH = 6000关于 disk table 的 option PORT_NO = 20300 数据库端口 IPC_CHANNEL_COUNT = 5 IPC 方式连接个数 CM_DISCONN_HIGHWATER_MARK = 10(default 3) 网络不稳定时数据库内部自动重试次数 AUTO_COMMIT = 0 : ( default : 1 ) 手动提交 PREPARE_LOG_FILE_COUNT = 25 预打开的日志个数 REPLICATION_PORT_NO = 30300 复制端口号 REPLICATION_MAX_LOGFILE = 2000异常时,自动放弃复制的日志个数极限,建议设置磁盘空间的 70-80%,即100G 空间就设置7000-8000个 REPLICATION_UPDATE_REPLACE = 1 数据冲突时,以传送过来的为基准 REPLICATION_PREFETCH_LOGFILE_COUNT = 10 传送复制时预打开的日志个数 REPLICATION_SYNC_TUPLE_COUNT = 20000000 replication sync 时,每个线程传送的记录行数 SELECT_HEADER_DISPLAY = 1 不显示表名 QUERY_TIMEOUT = 1000 单位:秒 FETCH_TIMEOUT = 360 DATABASE_IO_TYPE = 1 # 0: Buffered I/O, 1:Direct I/O MULTIPLEXING_THREAD_COUNT = x cpu core 个数小于 16 个,不用特意设置,默认就是core 数 cpu core 个数大于 16 个,就设置为 8-16之间,具体判断。一般设定为16。 MIN_LOG_RECORD_SIZE_FOR_COMPRESS = 128 MULTIPLEXING_MANAGER_INTERVAL = 1000 默认为10000,根据情况设置为1000 或 10000 或100000,单位:微秒 MULTIPLEXING_MAX_ELAPSE_TIME = 10 MULTIPLEXING_POLL_TIMEOUT = 50000 MULTIPLEXING_THREAD_COUNT 数据库启动时生成的服务线程个数,在线无法变更 MULTIPLEXING_MAX_ELAPSE_TIME 服务线程管理的任务执行时间超过此设置, 将被线程管理者重新分配给其他较空闲的服务线程或新生成的专有服务线程MULTIPLEXING_POLL_TIMEOUT 服务线程管理的任务完成语句处理后不会立即从执行状态(WAIT Que) 转换为等待状态 (TASK Que),而是经过此设置的时间后,确认没有任何其他请求时,再转换为等待状态 (TASK Que) MULTIPLEXING_MANAGER_INTERVAL 线程管理者的监控服务线程的时间间隔 QP_MSGLOG_FLAG = 2 perties 的内容可以通过 alter system or alter session 命令语修改, 但重起数据库时,重新读 perties的内容,并反映到系统表。DDL 语句 (包括对索引的操作)写入altibase_qp.log 文件中。g).创建数据库server createh).altibase用户创建isqlcreate user ocs identified by ocs1234;如果用户是只读用户,执行下面命令:Isqlgrant select any table to ocs;7.常用的SQL语句a).查询每个表的内存占用量select table_space, b.TABLE_NAME,d.fixed_alloc_mem+d.var_alloc_mem MEM_ALLOC_SIZE ,d.fixed_used_mem+d.var_used_mem USED_SIZE from x$tablespaces a, system_.SYS_TABLES_ b, X$TABLE_INFO c ,V$MEMTBL_INFO dwhere b.TABLE_OID=c.TABLE_OID and c.TABLESPACE_ID=a.IDand d.TABLE_OID=c.TABLE_OIDand b.table_name not like SYS_% and b.table_name not like NEXT_%order by desc , b.table_name asc;b).查询分配的内存数据量select alloc_sizefrom v$memstatwhere name = Storage_Memory_Manager;c).确定是否运行在归档模式下的方式select archivelog_mode from v$log;d).确定当前连接机器IPselect comm._name from v$session;e).确定当前有哪些复制连接select rep_gap from v$repgap;alter replication rep1 start(stop);启动或者停止复制连接f).执行检查点alter system checkpoint;一般做两次8.归档模式之间的切换方式Step1. Server stopStep2. Isql sysdbaStep3. Startup control;Step4. Alter database archivelog;Step5. Startup service;Step6. Quit;9. 取得自上次checkpoint结束时,内存数据库删除的最后一个日志文件号select LAST_DELETED_LOGFILE-1 from v$lfg;10.创建temp表空间Create database create datafile /alti_dbs0/temp001.dbf;11.启动恢复完全恢复:Alter database recover database;不完全恢复(指定时间):alter database recover database until time 2009-09-10:09:55:00;重新刷新事务日志Alter database mydb meta resetlogs;不完全恢复(最近):alter database recover databse until cancel;12.设置行和列大小Isql set linesize 200Isql set colsize 50查询修改结果:Isql show linesizeIsql show colsize13.启动和关闭timingIsqlset timing on(off);14.保存执行命令和结果通过打开spool,使用方法为:Isqlspool /opt/1.sqlIsqlselect * from t1;Isqlspool offIsql!cat /opt/1.sql15. DATE FORMAT定制有三种方式,一是环境变量,二是表的列后面直接定义,三是格式文件最后加入定义,具体如下:$ export ILO_DATEFORM =yyyy-mm-dd hh24:mi:ss; -2$vi t1.fmt table t1I1 integer;I2 date “YYYY-MM-DD HH:MI:SS”; -1I3 date;DATEFORM YYYY/MM/DD HH:MI:SS alter replication rep_name startIsqlalter replication rep_name stop18.删除复制Isqldrop replication rep_name;19.增加删除复制表Isqlalter replication rep_name add tableFrom local_user.local_tableName to remote_user.remote_tableName;Isqlalter replication rep_name drop tableFrom local_user.local_tableName to remote_user.remote_tableName;20.监控脚本A连接数据库的回话信息SELECT ID, REPLACE2(REPLACE2(COMM_NAME, SOCKET-, NULL), -SERVER, NULL) CONN_INFO, DECODE(ACTIVE_FLAG, 1, ACTIVE, INACTIVE) ACTIVE, OPENED_STMT_COUNT OPEN_STMT, CURRENT_STMT_ID CURRENT_STMT, CLIENT_PID, DECODE(PROTOCOL_SESSION, 1397051990, HANDSHAKE FOR SYSDBA DISPATCH, 1094995278, HANDSHAKE FOR USERS DISPATCH, 1129270862, CONNECT, 1145652046, DISCONNECT, 1229870668, INVALID, 1280460613, TIMEOUT, 1163022162, ERROR, 1347568976, PREPARE, 1163412803, EXECUTE, 1162103122, EXECDIRECT, 1179927368, FETCH, 1179796805, FREE, 1229931858, I/O ERROR, 1161905998, EAGAIN ERROR, 1480672077, XA COMMANDS, 1094929998, ACKNOWLEDGE, 1195725908, GET, UNKNOWN) PROTOCOL, DECODE(AUTOCOMMIT_FLAG, 0, Non AutoCommit, AutoCommit) COMMIT_MODE FROM V$SESSION;B. 按照用户统计会话 每个用户的执行语句数量和状态select b.DB_USERNAME, a.state, count(*) from v$statement a, v$session b where a.session_id = b.id group by b.DB_USERNAME, a.state;输出字段注释: STATE The statement status: 0: Initialization status where the statement is assigned 1: Statement is prepared 2: Statement is preparing to fetch 3: Statement is performing fetchC. 通过会话查询产生锁的应用进程信息每个session的加锁语句数量select SESSION_ID, count(*) from V$LOCK_STATEMENT group by session_id;察看一个session 是由哪个进程产生的select CLIENT_PID from v$session where id = 26131;通过进程号察看进程信息表ps -ef|grep 258666D. 看哪个session在对指定表进行操作select b.id, a.state, a.query from v$statement a, v$session b where a.session_id = b.id and query like %user_bill_plan%;E. 会话的锁信息SELECT B.SESSION_ID | ( | A.COMM_NAME | ) as SID, A.CLIENT_PID, B.TX_ID, A.DB_USERNAME | . | C.TABLE_NAME as TABLENAME, B.LOCK_DESC | ( | B.IS_GRANT | ) as LOCK_S, B.QUERY FROM V$SESSION A, V$LOCK_STATEMENT B, SYSTEM_.SYS_TABLES_ C WHERE A.ID = B.SESSION_ID AND B.TABLE_OID = C.TABLE_OID;SID : Session ID(连接 IP 等信息) CLIENT_PID : 客户端进程号 TX_ID : Transaction ID TABLENAME: 被锁的表名 LOCK_S: 锁的类型 QUERY : 加锁的语句F. 查看每张表上的加锁语句数量select table_oid, count(*) from v$lock_statement group by table_oid;G. 查看表上的锁信息select c.user_name, a.table_name, b.lock_desc, b.lock_cnt, b.trans_id from SYSTEM_.SYS_TABLES_ a, v$lock b, SYSTEM_.SYS_USERS_ c where a.table_oid = b.table_oid;H. 用户对象信息SELECT Y.USER_NAME, X.TABLE_NAME, DECODE(X.TABLE_TYPE, T, TABLE, V, VIEW, S, SEQUENCE) OBJECT_TYPE FROM SYSTEM_.SYS_TABLES_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID WHERE Y.USER_ID 1UNION ALLSELECT Y.USER_NAME, X.PROC_NAME, PSM FROM SYSTEM_.SYS_PROCEDURES_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID WHERE Y.USER_ID 1UNION ALLSELECT Y.USER_NAME, X.SYNONYM_NAME, SYNONYM FROM SYSTEM_.SYS_SYNONYMS_ X INNER JOIN SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID WHERE Y.USER_ID 1;输出字段注释: USER_NAME : 用户名 TABLE_NAME : 表名 OBJECT_TYPE : 对象类型I获取所有表的列信息SELECT U.USER_NAME USER_NAME, T.TABLE_NAME TABLE_NAME, C.COLUMN_NAME COLUMN_NAME, DECODE(C.DATA_TYPE, 1, CHAR, 4, INTEGER, 5, SMALLINT, 5, BIGINT, 12, VARCHAR, 2, NUMERIC, 6, FLOAT, 7, REAL, 8, DOUBLE, 9, DATE, 30, BLOB, 20002, NIBBLE, UNKNOWN) DATA_TYPE, C.PRECISION PRECISION, C.SCALE SCALE, C.IS_NULLABLE IS_NULLABLE FROM SYSTEM_.SYS_COLUMNS_ C, SYSTEM_.SYS_TABLES_ T, SYSTEM_.SYS_USERS_ U WHERE C.TABLE_ID = T.TABLE_ID AND T.USER_ID = U.USER_ID ORDER BY USER_NAME, TABLE_NAME;J. 查询约束条件对应关系SELECT C.USER_NAME | . | B.TABLE_NAME TABLE_NAME, A.CONSTRAINT_NAME, DECODE(A.CONSTRAINT_TYPE, 0, FOREIGNKEY, 1, NOTNULL, 2, UNIQUE, 3, PRIMARYKEY, 4, NULL, 5, TIMESTAMP, UNKNOWN) CON_TYPE, D.INDEX_NAME, (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ IT WHERE IT.TABLE_ID = A.REFERENCED_TABLE_ID) REFERENCE_TABLE, (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ II WHERE II.INDEX_ID = A.REFERENCED_INDEX_ID) REFERENCE_INDEX FROM SYSTEM_.SYS_CONSTRAINTS_ A LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D ON A.INDEX_ID = D.INDEX_ID, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID ORDER BY TABLE_NAME, CON_TYPE;输出字段注释: TABLE_NAME : 表名CONSTRAINT_NAME : 约束条件名 CON_TYPE : 约束条件类型 INDEX_NAME : 此约束条件为索引时,显示索引名 REFERENCE_TABLE : 约束条件为外键时,参照的表名 REFERENCE_INDEX : 约束条件为外键时,参照的索引名K.查看索引详细信息SELECT A.INDEX_ID, C.USER_NAME | . | B.TABLE_NAME TABLE_NAME, A.INDEX_NAME INDEX_NAME, NVL(D.NAME, MEMORY) TBS, DECODE(IS_UNIQUE, T, UNIQUE, NONUIQUE) UNIQUENESS, A.COLUMN_CNT COLUMN_COUNT FROM SYSTEM_.SYS_INDICES_ A LEFT OUTER JOIN V$TABLESPACES D ON A.TBS_ID = D.ID, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID AND C.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME;输出字段注释: NDEX_ID : Index ID TABLE_NAME : 表名 TBS : 索引的表空间名 UNIQUENESS : 是否为唯一索引 COLUMN_COUNT : 字段个数L索引的各个字段名SELECT D.USER_NAME | . | C.TABLE_NAME TABLE_NAME, B.INDEX_NAME, E.COLUMN_NAME, DECODE(SORT_ORDER, A, ASC, D, DESC) COLUMN_ORDER FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B, SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D, SYSTEM_.SYS_COLUMNS_ E WHERE A.INDEX_ID = B.INDEX_ID AND A.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.COLUMN_ID = E.COLUMN_ID AND D.USER_ID != 1 ORDER BY TABLE_NAME, INDEX_NAME, INDEX_COL_ORDER;输出字段注释: TABLE_NAME : 表名 INDEX_NAME : 索引名 COLUMN_NAME : 字段名 COLUMN_ORDER : 索引的 Ordering 顺序(ASC/DESC)M视图信息SELECT C.USER_NAME | . | B.TABLE_NAME VIEW_NAME, A.VIEW_ID, DECODE(A.STATUS, 0, VALID, INVALID) STATUS FROM SYSTEM_.SYS_VIEWS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.VIEW_ID = B.TABLE_ID AND A.USER_ID = C.USER_ID ORDER BY VIEW_NAME;输出字段注释: VIEW_NAME : 视图名 VIEW_ID : View Object ID STATUS : 视图状态 N序列信息SELECT C.USER_NAME | . | B.TABLE_NAME SEQ_NAME, A.CURRENT_SEQ, A.START_SEQ, A.INCREMENT_SEQ, A.CACHE_SIZE, A.MAX_SEQ, A.MIN_SEQ,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论