「YashanDB个人版体验」以DBA角度深度体验YashanDB
1. 数据库安装
先说说总体体验:
- 从安装的简易性来看,安装比较简单,但安装步骤稍显繁杂。安装包建议做成开箱即用的模式,安装过程通过读取环境变量{YASDB_HOME}和{YASDB_DATA}目录即可。
- 命令行安装时暂未看到关于内存大小、连接数等初始化安装比较关注的参数供用户自定义配置。
1.1 命令行安装
顺手写了2个脚本,安装执行如下2脚本即可~
1.1.1 操作系统环境配置
vi /root/script/config_system.sh ######################################################################## #!/bin/bash ############################# ## Author: Rae ## Date: 20231123 ## Version: 0.1 ############################# ##1. 开发环境调试模式 cat >> /etc/security/limits.conf <<EOF soft core unlimited hard core unlimited EOF ulimit -c unlimited ##2. 关闭交换分区 echo "vm.swappiness = 0">> /etc/sysctl.conf sysctl -w vm.swappiness=0 ##3. 配置自动调整本地端口范围 sysctl -w net.ipv4.ip_local_port_range='32768 60999' echo "net.ipv4.ip_local_port_range = 32768 60999" >> /etc/sysctl.conf ##4. 调整进程的VMA上限 echo "vm.max_map_count=2000000" >> /etc/sysctl.conf sysctl -w vm.max_map_count=2000000 ##5. 调整资源限制值 cat >> /etc/security/limits.conf <<EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 * soft rss unlimited * hard rss unlimited * soft stack 8192 * hard stack 8192 EOF ##6. 关闭透明大页 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag cat >> /etc/rc.local <<EOF echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag EOF chmod +x /etc/rc.local ##7. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld ##8. 历史残留配置文件 rm -f /etc/ld.so.conf.d/yashandb*.conf ##9. 清理共享内存 ipcrm -a ######################################################################## chmod +x /root/script/optimize_system.sh sh /root/script/optimize_system.sh > /dev/null
复制
1.1.2 数据库安装
脚本说明: ##操作系统用户密码:yashan/yashan ##数据库用户密码:sys/yashan#2023 ##安装包上传到/home/yashan下,root用户授权 chown yashan.YASDBA yashandb-personal-23.1.1.100-linux-x86_64.tar.gz vi /home/yashan/script/yashan_install.sh ######################################################################## #!/bin/bash ############################# ## Author: Rae ## Date: 20231123 ## Version: 0.1 ############################# ##1. 创建用户 useradd -d /home/yashan -m yashan groupadd YASDBA usermod -a -G YASDBA yashan echo "yashan" | passwd --stdin yashan ##2. 配置sudo免密 cat >> /etc/sudoers <<EOF yashan ALL=(ALL) NOPASSWD:ALL EOF chmod -w /etc/sudoers ##3. 创建目录 mkdir -p /data/yashan/{soft,data,yashan} chown -R yashan.YASDBA /data chmod 755 /data ##4. 解压软件 tar xzf /home/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -C /data/yashan/soft ##5. 数据库安装部署 cd /data/yashan/soft/ yashan_soft="/data/yashan/soft" #生成数据库部署文件 ${yashan_soft}/bin/yasboot package se gen --cluster yashandb -u yashan -p yashan --ip 127.0.0.1 --port 22 --install-path /data/yashan/yashan/yasdb_home --data-path /data/yashan/data/yasdb_data --begin-port 1688 #执行数据库安装,结束之后会启动yasagent和yasom两个 ${yashan_soft}/bin/yasboot package install -t hosts.toml -i /home/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz #数据库部署 ${yashan_soft}/bin/yasboot cluster deploy -t yashandb.toml ##6. 环境变量配置 cat /data/yashan/yashan/yasdb_home/yashandb/23.1.1.100/conf/yashandb.bashrc >> /home/yashan/.bash_profile source ~/.bash_profile ##7. 修改sys用户口令 ${yashan_soft}/bin/yasboot cluster password set -n yashan#2023 -c yashandb ##8. 查看数据库状态 ${yashan_soft}/bin/yasboot cluster status -c yashandb -d ##9. 崖山登录测试 ${yashan_soft}/bin/yasql sys/yashan#2023@127.0.0.1:1688 -c "select 'Hello, yashan' from dual;" ######################################################################## chmod +x /home/yashan/script/yashan_install.sh sh /home/yashan/script/yashan_install.sh ## 看到命令结束,回显输出OPEN状态,即表示数据库安装完成。
复制
1.2 可视化安装
1.2.1 操作系统环境配置
vi /root/script/config_system.sh ######################################################################## #!/bin/bash ############################# ## Author: Rae ## Date: 20231123 ## Version: 0.1 ############################# ##1. 开发环境调试模式 cat >> /etc/security/limits.conf <<EOF soft core unlimited hard core unlimited EOF ulimit -c unlimited ##2. 关闭交换分区 echo "vm.swappiness = 0">> /etc/sysctl.conf sysctl -w vm.swappiness=0 ##3. 配置自动调整本地端口范围 sysctl -w net.ipv4.ip_local_port_range='32768 60999' echo "net.ipv4.ip_local_port_range = 32768 60999" >> /etc/sysctl.conf ##4. 调整进程的VMA上限 echo "vm.max_map_count=2000000" >> /etc/sysctl.conf sysctl -w vm.max_map_count=2000000 ##5. 调整资源限制值 cat >> /etc/security/limits.conf <<EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 * soft rss unlimited * hard rss unlimited * soft stack 8192 * hard stack 8192 EOF ##6. 关闭透明大页 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag cat >> /etc/rc.local <<EOF echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag EOF chmod +x /etc/rc.local ##7. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld ##8. 历史残留配置文件 rm -f /etc/ld.so.conf.d/yashandb*.conf ##9. 清理共享内存 ipcrm -a ######################################################################## chmod +x /root/script/optimize_system.sh sh /root/script/optimize_system.sh > /dev/null
复制
1.2.1 数据库安装
##1. 创建用户 useradd -d /home/yashan -m yashan groupadd YASDBA usermod -a -G YASDBA yashan echo "yashan" | passwd --stdin yashan ##2. 配置sudo免密 cat >> /etc/sudoers <<EOF yashan ALL=(ALL) NOPASSWD:ALL EOF chmod -w /etc/sudoers ##3. 创建目录 mkdir -p /data/yashan/{soft,data,yashan} chown -R yashan.YASDBA /data chmod 755 /data ##4. 解压软件 tar xzf /home/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -C /data/yashan/soft ##5. 启动web页面访问 yashan_soft="/data/yashan/soft" ${yashan_soft}/bin/yasom --web --listen 10.28.12.22:9001 ##6. 配置环境变量 cat /home/yashan/yashan/yasdb_home/yashandb/23.1.1.100/conf/yashandb.bashrc >> ~/.bash_profile source ~/.bash_profile yasql sys/password@10.28.12.22:1688 ########################################################################## 注意:存在节点的内存限制,最小为 1536M,每台主机的节点的内存限制之和不能大于此主机的内存限制。 默认建库的语句如下: CREATE DATABASE yashandb CHARACTER SET utf8 LOGFILE('?/dbfiles/redo1' SIZE 128M BLOCKSIZE 4K,'?/dbfiles/redo2' SIZE 128M BLOCKSIZE 4K,'?/dbfiles/redo3' SIZE 128M BLOCKSIZE 4K,'?/dbfiles/redo4' SIZE 128M BLOCKSIZE 4K) ARCHIVELOG ; ##########################################################################
复制
2. 数据库维护
先说说总体体验
- Yashan的大部分视图与Oracle一致,学习成本较低,有Oracle基础的比较容易上手。
- Yashan关于历史视图的内容较少,历史事件回溯比较困难。
- Yashan性能分析工具比较单一,awr输出内容相对比较简单,sql性能分析的工具较有限。
- 恢复演练测试中发现Yashan缺少手工创建控制文件、自定义数据文件、日志文件路径功能。
- AWR报告无法直接导出,还需要手工复制粘贴,ADDM功能暂未能体现出来。
- 针对单个SQL的跟踪优化,是否能提供类似Oracle的sql monitor功能。
2.1 日常维护
整理了日常运维工作中常用的SQL,如数据库启停、表空间情况、慢日志、锁定位分析等内容供参考~
##数据库启停 yasboot process yasagent start -c yashandb yasboot process yasagent status -c yashandb yasboot process yasom start -c yashandb yasboot process yasom status -c yashandb -- 由于服务都是通过yasboot工具管理 ,所以必须先启动om和agent服务。 ##查看状态 yasql sys/yashan#2023@127.0.0.1:1688 -c "select database_name from v\$database;" yasql sys/yashan#2023@127.0.0.1:1688 -c "select status from v\$instance;" yasboot cluster status -c yashandb ##启动数据库 yasboot cluster start -c yashandb -m nomount yasboot cluster start -c yashandb -m mount yasboot cluster start -c yashandb 数据库启动的三个状态: nomount --> mount --> open nomount 可通过 alter database mount; alter database open;的方式推进启动进度。 ##.关闭数据库 yasboot cluster stop -c yashandb ##重启数据库 yasboot cluster restart -c yashandb -- 表空间大小查询 select id, dt.tablespace_name, max_size / 1024 / 1024 max_size_mb, total_bytes / 1024 / 1024 total_size_mb, ts_used_size_mb, status, contents, logging, allocation_type, block_size, segment_space_management, encrypted from dba_tablespaces dt left join (select tablespace_name, sum(bytes) / 1024 / 1024 ts_used_size_mb from dba_segments d group by d.tablespace_name) eg on dt.tablespace_name = eg.tablespace_name; -- 临时表空间信息 SELECT FILE_ID, FILE_NAME, STATUS, BYTES / 1024 / 1024 SIZE_MB, AUTOEXTENSIBLE, TABLESPACE_NAME, MAXBYTES / 1024 / 1024 MAXSIZE_MB, INCREMENT_BY FROM DBA_TEMP_FILES; -- 日志文件信息 select thread#, name, block_size, block_count, used_blocks, sequence#, status from v$logfile; -- 用户信息 select username, user_id, password, account_status, lock_date, expiry_date, default_tablespace, created, authentication_type, last_login, password_change_date, database_maintained, profile from dba_users; -- 密码过期可通过加密密文修改: alter user xx identified by values "S:39435DAFBF9608EF2430B7AFD1169B7A949D96D9397C2070F39DAB47D70FCB126A1BC1E5A63BD60F8A70" default tablespace users; -- 所有用户角色 select grantee, granted_role privilege, 'role_privs' privilege_type, case admin_option when 'y' then 'yes' else 'no' end admin_option from dba_role_privs union select grantee, privilege, 'sys_privs' privilege_type, admin_option from dba_sys_privs union select grantee, privilege || ' on ' || owner || '.' || table_name privilege, 'table_privs' privilege_type, grantable from dba_tab_privs t where t.grantee in (select username from all_users a where a.username not in ('sys', 'sysdba', 'syssso', 'sysauditor')) order by grantee, privilege_type, privilege; -- 查看参数 select * from v$parameter; show parameter xx; -- 统计对象情况 select d.owner, d.object_type, count(*) cnt from dba_objects d where d.owner not in ('sys', 'sysdba', 'syssso', 'ctisys', 'sysauditor') group by d.owner, d.object_type; -- 查看推荐参数 exec DBMS_PARAM.OPTIMIZE(); select dbms_param.show_recommend() as recommend_settings from dual; -- 查看归档情况 select database_id, database_name, log_mode, block_size, restore_time from v$database; -- 查看每小时归档情况 select left(first_time, 10) day, sum(decode(substr(first_time, 12, 2), '00', 1, 0)) h00, sum(decode(substr(first_time, 12, 2), '01', 1, 0)) h01, sum(decode(substr(first_time, 12, 2), '02', 1, 0)) h02, sum(decode(substr(first_time, 12, 2), '03', 1, 0)) h03, sum(decode(substr(first_time, 12, 2), '04', 1, 0)) h04, sum(decode(substr(first_time, 12, 2), '05', 1, 0)) h05, sum(decode(substr(first_time, 12, 2), '06', 1, 0)) h06, sum(decode(substr(first_time, 12, 2), '07', 1, 0)) h07, sum(decode(substr(first_time, 12, 2), '08', 1, 0)) h08, sum(decode(substr(first_time, 12, 2), '09', 1, 0)) h09, sum(decode(substr(first_time, 12, 2), '10', 1, 0)) h10, sum(decode(substr(first_time, 12, 2), '11', 1, 0)) h11, sum(decode(substr(first_time, 12, 2), '12', 1, 0)) h12, sum(decode(substr(first_time, 12, 2), '13', 1, 0)) h13, sum(decode(substr(first_time, 12, 2), '14', 1, 0)) h14, sum(decode(substr(first_time, 12, 2), '15', 1, 0)) h15, sum(decode(substr(first_time, 12, 2), '16', 1, 0)) h16, sum(decode(substr(first_time, 12, 2), '17', 1, 0)) h17, sum(decode(substr(first_time, 12, 2), '18', 1, 0)) h18, sum(decode(substr(first_time, 12, 2), '19', 1, 0)) h19, sum(decode(substr(first_time, 12, 2), '20', 1, 0)) h20, sum(decode(substr(first_time, 12, 2), '21', 1, 0)) h21, sum(decode(substr(first_time, 12, 2), '22', 1, 0)) h22, sum(decode(substr(first_time, 12, 2), '23', 1, 0)) h23, count(*) total from v$archived_log where first_time>=(sysdate-7) group by left(first_time, 10) order by left(first_time, 10) desc; -- 会话情况 select count(*) cnt, a.ip_address, a.cli_program, a.cli_hostname, a.cli_osuser, a.username, a.status from v$session a group by a.ip_address, a.cli_program, a.cli_hostname, a.cli_osuser, a.username, a.status order by count(*) desc; -- 查看错误日志 select * from (select incident_id, session_id, error_number, error_argument, error_comments from v$diag_incident) where rownum<=100; -- 查看awr信息 select dbid, snap_interval, retention, most_recent_snap_id, most_recent_snap_time, status_flag from sys.wrm$_wr_control; -- 查看慢sql select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间", round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间", sa.COMMAND_TYPE, sa.PARSING_USER_ID "用户ID", u.username "用户名", sa.HASH_VALUE from v$sqlarea sa left join all_users u on sa.PARSING_USER_ID = u.user_id where sa.EXECUTIONS > 0 order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc) where rownum <= 5; -- 查看事务隔离级别 select * from v$transaction; -- 等待事件 select * from (select * from v$system_event order by total_waits desc) where rownum<=20; -- 查看TX锁对象(被阻塞的会话) select inst_id, sid, serial#, username, sql_id, lockwait, wait_event, ip_address from gv$session where wait_event is not null; select sql_id, sql_text from gv$sqltext where sql_id = ''; -- 查看锁源 select * from v$lock; --拿取sid select sql_text from "V_$SQLTEXT" a join "V_$SESSION" b on a.HASH_VALUE = b.SQL_HASH_VALUE AND b.sid = xx; select l.lmode, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.sql_id, st.sql_text, p.THREAD_ID from v$locked_object l, dba_objects o, v_$session s, v$process p, v$sqltext, v_$sqltext st where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.THREAD_ADDR and st.hash_value = s.sql_hash_value order by o.object_id; -- 查看前5系统等待事件 select * from gv$session_wait where wait_event is not null; select * from (select * from gv$system_event order by AVERAGE_WAIT_FG desc) where rownum <=5; select * from (select * from gv$system_wait_class order by time_waited desc ) where rownum <= 5;
复制
2.2 备份恢复
2.2.1 SQL命令备份恢复
##1. 数据库全备 mkdir -p /home/yashan/backup/ yasql / as sysdba backup database full format '/home/yashan/backup/full_20211209191000' tag 'yashan_fullbak_20231129' parallelism 3; ##2. 数据库0级备份和1级备份 backup database incremental level 0 format '/home/yashan/backup/base_0_20231129'; backup database incremental level 1 format '/home/yashan/backup/incr_1_20231129'; ##3. 数据库恢复 yasboot cluster stop -c yashandb yasboot cluster start -c yashandb -m nomount ##注:恢复之前,要先清空数据目录 restore database from '/home/yashan/backup/base_0_20231129' parallelism 3; recover database; --恢复到最新 --restore database until time to_date('2023-11-29 11:50:50','yyyy-mm-dd hh24:mi:ss'); --恢复到指定时间点 alter database open <resetlogs>;
复制
2.2.2 yasrman备份恢复
##1. 创建catalog yasrman sys/sys@127.0.0.1:1688 -c 'create catalog' -D /home/yashan/catalog yasrman sys/sys@127.0.0.1:1688 -c 'show all' -D /home/yashan/catalog ## 2. 数据库全备 yasrman sys/yashan#2023@127.0.0.1:1688 -c "backup database full format '/home/yashan/backup/full_001' tag 'full_backup' parallelism 3" -D /home/yashan/catalog ##不指定存放路径的话,默认备份存放路径:$YASDB_DATA/backup ##3. 数据库0级备份和1级备份 ## 0级备份 yasrman sys/yashan#2023@127.0.0.1:1688 -c "backup database incremental level 0 format '/home/yashan/backup/full_001' tag 'full_backup' parallelism 3" -D /home/yashan/catalog yasrman sys/yashan#2023@127.0.0.1:1688 -c "backup database incremental level 1 format '/home/yashan/backup/full_001' tag 'full_backup' parallelism 3" -D /home/yashan/catalog ## 1级备份 ##4. 查看备份集 yasrman sys/yashan#2023@127.0.0.1:1688 -c "list backup" -D /home/yashan/catalog ##4. 删除备份集 ##(物理) yasrman sys/yashan#2023@127.0.0.1:1688 -c "delete backupset tag 'full_backup1'" -D /home/yashan/catalog
复制
编写了数据库备份恢复脚本,每周日全备1次,周一到周六增备1次,脚本内容如下:
cat /home/yashan/script/yashan_backup.sh #!/bin/bash ############################################# # Scipt is uesd to set backup level 0 policy. # Author: Rae # Date: 2023/11/29 # Version: 1.0 ############################################# # Set enviroment parameter source ~/.bash_profile export DATE=`date +%Y%m%d-%H%M%S` export CURRENT_DATE=`date +%A` BAK_PATH="/home/yashan/backup" CATALOG_PATH="/home/yashan/catalog" BAK_LOG="/home/yashan/backup/yashan_backup.log" USERNAME="sys" PASSWORD="yashan#2023" IP="127.0.0.1" PORT=1688 PARALLELISM=4 # Create necessary directory if [ ! -d ${BAK_PATH} ];then mkdir -p ${BAK_PATH} fi if [ ! -d ${CATALOG_PATH} ];then mkdir -p ${CATALOG_PATH} yasrman ${USERNAME}/${PASSWORD}@127.0.0.1:1688 -c 'create catalog' -D ${CATALOG_PATH} echo "`date +%Y%m%d-%H%M%S` | [Info] | Success create yashan catalog !" >> ${BAK_LOG} fi if [ ${CURRENT_DATE} == "Sunday" ];then echo "`date +%Y%m%d-%H%M%S` | [Info] | Begin backup databaseincremental level 0 !" >> ${BAK_LOG} yasrman ${USERNAME}/${PASSWORD}@${IP}:${PORT} -c "backup database incremental level 0 format '${BAK_PATH}/level0_${DATE}' tag 'level0_${DATE}'" -D ${CATALOG_PATH} echo "`date +%Y%m%d-%H%M%S` | [Info] | Success backup databaseincremental level 0 !" >> ${BAK_LOG} else previous_sunday=`date -d "last Sunday" +%Y%m%d` result=`yasrman ${USERNAME}/${PASSWORD}@${IP}:${PORT} -c "list backup" -D ${CATALOG_PATH} | grep "tag" | grep "level0" | grep ${previous_sunday} | wc -l` if [[ ${result} == 1 ]];then echo "`date +%Y%m%d-%H%M%S` | [Info] | Begin backup databaseincremental level 1 !" >> ${BAK_LOG} yasrman ${USERNAME}/${PASSWORD}@${IP}:${PORT} -c "backup database incremental level 1 format '${BAK_PATH}/level0_${DATE}' tag 'level1_${DATE}'" -D ${CATALOG_PATH} echo "`date +%Y%m%d-%H%M%S` | [Info] | Success backup databaseincremental level 1 !" >> ${BAK_LOG} else echo "`date +%Y%m%d-%H%M%S` | [Info] | Begin backup databaseincremental level 0 !" >> ${BAK_LOG} yasrman ${USERNAME}/${PASSWORD}@${IP}:${PORT} -c "backup database incremental level 0 format '${BAK_PATH}/level0_${DATE}' tag 'level0_${DATE}'" -D ${CATALOG_PATH} echo "`date +%Y%m%d-%H%M%S` | [Info] | Success backup databaseincremental level 0 !" >> ${BAK_LOG} fi fi #配置定时任务 crontab -l 0 1 * * * /home/yashan/script/yashan_backup.sh
复制
2.3 性能分析
2.3.1 AWR报告
select dbid, instance_number, snap_id, begin_interval_time from WRM$_SNAPSHOT; set serveroutput on exec dbms_awr.awr_report(dbid,instance_number,start_snap_id,stop_snap_id); 手工创建快照:exec dbms_awr.create_snapshot();
复制
主要记录了数据库基本信息、数据库负载情况以及SQL执行情况。
2.3.2 性能视图
2.3.3 执行计划分析
方式1: explain select * from a, b where a.id = b.id; 方式2:alter session set statistic_level = all; set autotrace on; select * from a, b where a.id = b.id;
复制
2.3.4 统计信息
判断列统计信息准确性(最大值,最小值判断): select max(id), min(id) from t1; select high_value, low_value from dba_tab_col_statistics where table_name = 'T1' and column_name = 'ID'; 查看统计信息是否失效: select owner, table_name, num_rows, avg_space, chain_cnt, sample_size, last_analyzed, global_stats, stale_stats from dba_tab_statistics where table_name = 'T1'; 统计信息收集: ANALYZE TABLE t1 PARTITION NULL INDEX_CASCADE true METHOD_OPTION 'FOR ALL COLUMNS' GRANULARITY 'AUTO' PARALLEL_DEGREE 1;
复制
2.3.5 hint调优
2.3.5.1. 改变join的hint
2.3.5.2. 改变访问路径的hint
2.3.5.3 选择率的hint
explain select * from t1, t2, t3 where t1.c1 = t2.c1 selectivity 0.0001 and t2.c1 = t3.c1;
复制
2.3.6 绑定执行计划outline
3. 数据库升级
先说说总体体验:
- 升级比较简单,但是步骤还是稍显冗杂。建议将部分步骤整合成自动化脚本,缩减步骤。
- 升级前置检查,建议可以开发precheck脚本,评估当前系统满足升级需求。
- 建议增加预升级功能,把升级需要跑通的步骤check一遍,提高升级成功率。
yasboot cluster upgrade --cluster yashandb yasboot cluster rollback -c yashandb -d yashandb
复制
4. 数据库迁移
暂时没有时间测试了,有空测试了,再更新~
5. 使用总结
YashanDB的总体体验还是不错的,运维学习成本较低,具备Oracle运维经验的工程师可以很快速的上手。功能上虽然距离Oracle还有一定距离,但是相信国产数据库YashanDB会越做越好。
暂时先写到这里了,相信这份文档能给你一些收获。
最后修改时间:2023-12-03 12:16:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
拒绝玄学调优!科学分析精准狙击慢SQL
YashanDB
105次阅读
2025-03-28 15:02:10
100+项!YashanDB与Oracle全面对比 详解YashanDB如何做到1:1替代Oracle
YashanDB
102次阅读
2025-03-19 11:20:49
双第一!崖山科技获评最具投资价值企业
YashanDB
81次阅读
2025-04-01 18:30:29
YashanDB 4月YCA认证培训,火热招生中!
YashanDB
50次阅读
2025-04-08 11:01:38
崖山数据库亮相2025年湾区数智金融会议 “零感知”容灾方案护航金融核心
YashanDB
39次阅读
2025-04-16 10:33:28
YashanDB 如何确认执行计划中的驱动表
Skye
36次阅读
2025-04-09 17:29:16
【江月】yashan YAS-00402报错处理以及LISTEN_ADDR参数的使用
春江花月夜
35次阅读
2025-04-10 21:03:46
共筑智慧城市新生态!YashanDB与荣科科技完成兼容互认证
YashanDB
34次阅读
2025-03-19 11:20:50
YashanDB 常见问题-P2
Skye
27次阅读
2025-04-08 15:52:13
数据库生态工具共建+1!YashanDB与北京永乐时代完成兼容互认证
YashanDB
25次阅读
2025-03-24 09:41:32