DMS指引教程
1、前提条件
1.1 开通DMS账号
开通DMS账号权限需要在OpsCloud上提交阿里云RAM策略申请,流程审批完成后DMS账号和初始化密码将发送钉钉通知
1.2 登录DMS
DMS登录地址:登录DMS
请注意选择RAM用户登录并填入收到的账号密码
1.3 数据库权限申请
在DMS页面顶部导航栏安全与规范
中选择权限工单,点击右上角的权限申请
根据需求在权限工单页面选择对应的环境、数据库、权限类型等
2、DMS使用
2.1 SQL查询
DMS顶端导航栏选择SQL窗口
, 选择相应的数据库
进入编辑窗口,写入SQL语句,点击执行可得到结果集
2.2 导出工单
如需要导出数据集或导出整表,顶端导航栏选择数据库开发
→数据导出
→SQL结果集导出
导出工单填写示例
2.3 数据变更
如果需要执行数据变更,请在顶端导航栏选择数据库开发
→数据变更
→普通数据变更
,填写相关信息,并提交流程
注意!
如果提交的是MongoDB变更工单, 回滚SQL语句必填,否则不予通过。示例如下:
执行SQL
db.test.remove({name:"tom"})
回滚SQL
db.test.insert({name:"tome",age:NumberInt(18),address:"shenzhen"})
3、审批流程
3.1 日常变更
日常变更由开发人员自行提交变更工单,由TL和DBA审批
3.2 版本发布
版本发布因开发人员较多,涉及的模块也较多,因此需要项目组内部按照不同模块合并汇总SQL语句,并由TL进行review后,统一进行变更工单提交,由TL和DBA进行审批
4、注意事项
4.1 资源命名规则
资源命名格式为:{云服务}_{数据库类型}_{实例名}_{环境},操作时应先确认环境和数据库正确,再进行操作
key | value | desc |
云服务 | ali | 阿里云 |
aws | 亚马逊云 | |
数据库类型 | RDS | MySQL | mongo | MongoDB |
环境 | dev | CI开发环境 |
daily | 测试环境 | |
gray | 灰度环境 | |
prod | 生产环境 |
4.2 MongoDB语法
DMS针对MongoDB支持下列语法
操作类型 | 命令列举 |
CRUD | 查询:aggregate,find,findOne,count,distinct,getIndexes,
getShardDistribution,isCapped,stats,dataSize,storageSize, totalIndexSize,totalSize |
更新:insert,save,findAndModify,remove,update | |
索引:createIndex,createIndexes | DB命令 | commandHelp,currentOp,getCollectionInfos, getCollectionNames,getLastError,getLastErrorObj, getLogComponents,getPrevError,getProfilingStatus, getReplicationInfo,getSiblingDB,help,isMaster, listCommands,printCollectionStats,printReplicationInfo, version,serverBuildInfo,serverStatus,stats |
DMS不支持db.getCollection('xxxx').insert()语法,请直接使用db.xxxx.insert()
更新操作
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
选项 | 类型 | 描述 |
---|---|---|
query | document | 更新的过滤条件 |
update | document | 更新模式 |
upsert | boolean | (可选)没有匹配到查询条件时,是否创建新文档,默认为false |
multi | boolean | (可选)是否更新匹配到的多个结果,false则只更新第一条 |
更新单个文档
db.books.update(
{ item: "EFG222" },
{ $set: { reorder: false, tags: [ "literature", "translated" ] } },
{ upsert: false, multi: false }
)
更新多个文档
db.books.update(
{ item: "EFG222" },
{ $set: { reorder: false, tags: [ "literature", "translated" ] } },
{ upsert: false, multi: true }
)
插入操作
插入单个文档
db.products.insert( { item: "card", qty: 15 } )
插入多个文档
db.products.insert(
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
)
删除操作
DMS仅支持remove命令
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
选项 | 类型 | 描述 |
---|---|---|
query | document | 指定删除条件 |
justOne | boolean | (可选)是否只删除匹配到的第一个文档,默认为false |
db.products.remove( { qty: { $gt: 20 }, $isolated: 1 } )
MongoDB语法请参考:MongoDB官网文档
4.3 变更规范
- [ALL] 禁止全表update
- [ALL] 禁止全表delete
- [ALL] 禁止truncate和drop操作
- [ALL] 工单中禁止使用USE database等无关命令
- [MySQL] DDL需要在多个国家执行,请选择所有国家的数据库
- [ALL] Insert批量插入需要合并为单条Insert语句的写法