# huaweicloud-ugo-evaluation-project-java
**Repository Path**: HuaweiCloudDeveloper/huaweicloud-ugo-evaluation-project-java
## Basic Information
- **Project Name**: huaweicloud-ugo-evaluation-project-java
- **Description**: 基于数据库和应用迁移 UGO服务,创建源数据库评估项目,收集源数据信息,分析评估该项目,选择合适的目标数据库。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master-dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-09-21
- **Last Updated**: 2023-11-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 0.版本说明
本示例配套的SDK版本为:3.0.104
## 1.功能介绍
本示例展示如何基于数据库和应用迁移 UGO服务的SDK,创建源数据库评估项目,收集源数据信息,分析评估该项目,选择目标数据库。至此,可以依赖该评估项目创建迁移项目,具体请参考示例“迁移项目_对象迁移”。
## 2.前置条件
- 已[注册](https://reg.huaweicloud.com/registerui/cn/register.html?locale=zh-cn#/register)华为云,
并完成[实名认证](https://account.huaweicloud.com/usercenter/?region=cn-north-4#/accountindex/realNameAuth) 。
- 已获取华为云开发工具包(SDK)。
- 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。
具体请参考[访问密钥](https://support.huaweicloud.com/usermanual-ca/zh-cn_topic_0046606340.html)。
- 已具备开发环境 ,支持Java JDK 1.8及其以上版本。
- 其他前置条件请参考数据库和应用迁移 UGO服务文档的[快速入门 > 评估项目](https://support.huaweicloud.com/qs-ugo/ugo_02_0005.html)。
## 3.SDK获取和安装
您可以通过Maven配置所依赖的SDK,具体的SDK版本号请参见[SDK开发中心](https://sdkcenter.developer.huaweicloud.com/?language=java) 。
```xml
com.huaweicloud.sdk
huaweicloud-sdk-ugo
3.0.104
```
## 4.流程图

## 5.示例代码
以下代码展示如何使用SDK创建源数据库评估项目,收集源数据信息,分析评估该项目,选择目标数据库:
```java
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
*/
package com.huawei.demo;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.ugo.v1.UgoClient;
import com.huaweicloud.sdk.ugo.v1.model.ConfirmTargetDBReq;
import com.huaweicloud.sdk.ugo.v1.model.ConfirmTargetDbTypeRequest;
import com.huaweicloud.sdk.ugo.v1.model.CreateEvaluationProjectReq;
import com.huaweicloud.sdk.ugo.v1.model.CreateEvaluationProjectRequest;
import com.huaweicloud.sdk.ugo.v1.model.DeleteEvaluationProjectRequest;
import com.huaweicloud.sdk.ugo.v1.model.EvaluationProject;
import com.huaweicloud.sdk.ugo.v1.model.ListEvaluationProjectsRequest;
import com.huaweicloud.sdk.ugo.v1.model.ListEvaluationProjectsResponse;
import com.huaweicloud.sdk.ugo.v1.model.ObjectTypeInfo;
import com.huaweicloud.sdk.ugo.v1.model.ProjectStatusDetail;
import com.huaweicloud.sdk.ugo.v1.model.SchemaInfo;
import com.huaweicloud.sdk.ugo.v1.model.ShowEvaluationProjectDetailRequest;
import com.huaweicloud.sdk.ugo.v1.model.ShowEvaluationProjectStatusRequest;
import com.huaweicloud.sdk.ugo.v1.model.ShowEvaluationProjectStatusResponse;
import com.huaweicloud.sdk.ugo.v1.model.SourceDBInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 数据库和应用迁移 UGO的示例代码:数据库评估
*
* @since 2022-08-20
*/
public class EvaluationProjectDemo {
private static final Logger logger = LoggerFactory.getLogger(SqlConvertDemo.class);
public static void main(String[] args) throws Exception {
UgoClient ugoClient = getUgoClient();
String evaluationProjectName = "";
String sourceDbUserName = "";
String sourceDbPassword = "";
String sourceDbConnectionString = "";
String targetDBType = "RDS for MySQL";
String targetDBVersion = "5.7";
SourceDBInfo sourceDbInfo = new SourceDBInfo();
sourceDbInfo.setUserName(sourceDbUserName);
sourceDbInfo.setPassword(sourceDbPassword);
sourceDbInfo.setSourceDbType(SourceDBInfo.SourceDbTypeEnum.ORACLE);
sourceDbInfo.setSourceDbVersion(SourceDBInfo.SourceDbVersionEnum._11G);
sourceDbInfo.setConnectionString(sourceDbConnectionString);
// Step 1: Create ugo evaluation project.
createEvaluationProject(ugoClient, evaluationProjectName, sourceDbInfo);
// Step 2: Get evaluation project list.
Integer evaluationProjectId = getEvaluationProjectId(ugoClient, evaluationProjectName);
// Step 3: Check evaluation project status.
checkEvaluationProjectStatus(ugoClient, evaluationProjectId);
// Step 4: Confirm target db type.
confirmTargetDBType(ugoClient, evaluationProjectId, targetDBType, targetDBVersion);
// Step 5: Get evaluation project detail.
getEvaluationProjectDetail(ugoClient, evaluationProjectId);
// Step 6: Create migration project by this evaluation project.
// Step 7: Delete evaluation project.
deleteEvaluationProject(ugoClient, evaluationProjectId);
}
private static UgoClient getUgoClient() {
// 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
String endpoint = "";
String projectId = "";
// Http Configuration for client
HttpConfig config = HttpConfig.getDefaultHttpConfig();
config.withIgnoreSSLVerification(true);
// Create the authentication
BasicCredentials auth = new BasicCredentials()
.withAk(ak)
.withSk(sk)
.withProjectId(projectId);
// Create UgoClient instance
return UgoClient.newBuilder()
.withHttpConfig(config)
.withCredential(auth)
.withEndpoint(endpoint)
.build();
}
private static void createEvaluationProject(UgoClient ugoClient, String evaluationProjectName, SourceDBInfo sourceDbInfo) {
CreateEvaluationProjectRequest createEvaluationProjectRequest = new CreateEvaluationProjectRequest();
CreateEvaluationProjectReq createEvaluationProjectBody = new CreateEvaluationProjectReq();
createEvaluationProjectBody.setEvaluationProjectName(evaluationProjectName);
createEvaluationProjectBody.setSourceDbInfo(sourceDbInfo);
SchemaInfo schemasInfo = new SchemaInfo();
schemasInfo.setIsSelectAllSchemas(Boolean.TRUE);
createEvaluationProjectBody.setSchemasInfo(schemasInfo);
ObjectTypeInfo objectsTypeInfo = new ObjectTypeInfo();
objectsTypeInfo.setIsSelectAllObjectsType(Boolean.TRUE);
createEvaluationProjectBody.setObjectsTypeInfo(objectsTypeInfo);
createEvaluationProjectRequest.setBody(createEvaluationProjectBody);
ugoClient.createEvaluationProject(createEvaluationProjectRequest);
}
private static Integer getEvaluationProjectId(UgoClient ugoClient, String evaluationProjectName) throws Exception {
ListEvaluationProjectsRequest listEvaluationProjectsRequest = new ListEvaluationProjectsRequest();
listEvaluationProjectsRequest.setEvaluationProjectName(evaluationProjectName);
ListEvaluationProjectsResponse listEvaluationProjectsResponse = null;
Integer totalCount = 0;
for (int time = 0; time < 60; time++) {
listEvaluationProjectsResponse = ugoClient.listEvaluationProjects(listEvaluationProjectsRequest);
totalCount = listEvaluationProjectsResponse.getTotalCount();
if (totalCount == 1) {
break;
}
Thread.sleep(1000);
}
if (totalCount == 0) {
logger.error("create evaluation project time out!");
return null;
}
EvaluationProject evaluationProject = listEvaluationProjectsResponse.getEvaluationProjects().get(0);
return evaluationProject.getEvaluationProjectId();
}
private static void checkEvaluationProjectStatus(UgoClient ugoClient, Integer evaluationProjectId) throws InterruptedException {
ShowEvaluationProjectStatusRequest showEvaluationProjectStatusRequest = new ShowEvaluationProjectStatusRequest();
showEvaluationProjectStatusRequest.setEvaluationProjectId(Integer.toString(evaluationProjectId));
while (true) {
ShowEvaluationProjectStatusResponse showEvaluationProjectStatusResponse
= ugoClient.showEvaluationProjectStatus(showEvaluationProjectStatusRequest);
ShowEvaluationProjectStatusResponse.EvaluationProjectStatusEnum evaluationProjectStatus
= showEvaluationProjectStatusResponse.getEvaluationProjectStatus();
ProjectStatusDetail projectStatusDetail = showEvaluationProjectStatusResponse.getProjectStatusDetail();
String objectCollectionStatus = projectStatusDetail.getObjectCollectionStatus();
String preMigrationStatus = projectStatusDetail.getPreMigrationStatus();
String completedStatus = ShowEvaluationProjectStatusResponse.EvaluationProjectStatusEnum.COMPLETED.getValue();
String pendingStatus = ShowEvaluationProjectStatusResponse.EvaluationProjectStatusEnum.PENDING.getValue();
if (!completedStatus.equals(objectCollectionStatus)) {
logger.info("object collection in progress: {}", projectStatusDetail.getObjectCollectionProgress());
Thread.sleep(10000);
continue;
}
if (!completedStatus.equals(preMigrationStatus)) {
logger.info("pre-migration in progress: {}", projectStatusDetail.getPreMigrationProgress());
Thread.sleep(10000);
continue;
}
if (pendingStatus.equals(evaluationProjectStatus.getValue())) {
logger.info("wait to confirm target db type.");
break;
}
}
}
private static void confirmTargetDBType(UgoClient ugoClient, Integer evaluationProjectId, String targetDBType, String targetDBVersion) {
ConfirmTargetDbTypeRequest confirmTargetDbTypeRequest = new ConfirmTargetDbTypeRequest();
ConfirmTargetDBReq confirmTargetDBBody = new ConfirmTargetDBReq();
confirmTargetDBBody.setEvaluationProjectId(Integer.toString(evaluationProjectId));
confirmTargetDBBody.setTargetDbType(targetDBType);
confirmTargetDBBody.setTargetDbVersion(targetDBVersion);
confirmTargetDbTypeRequest.setBody(confirmTargetDBBody);
ugoClient.confirmTargetDbType(confirmTargetDbTypeRequest);
}
private static void getEvaluationProjectDetail(UgoClient ugoClient, Integer evaluationProjectId) {
ShowEvaluationProjectDetailRequest showEvaluationProjectDetailRequest = new ShowEvaluationProjectDetailRequest();
showEvaluationProjectDetailRequest.setEvaluationProjectId(Integer.toString(evaluationProjectId));
ugoClient.showEvaluationProjectDetail(showEvaluationProjectDetailRequest);
}
private static void deleteEvaluationProject(UgoClient ugoClient, Integer evaluationProjectId) {
DeleteEvaluationProjectRequest deleteEvaluationProjectRequest = new DeleteEvaluationProjectRequest();
deleteEvaluationProjectRequest.setEvaluationProjectId(Integer.toString(evaluationProjectId));
ugoClient.deleteEvaluationProject(deleteEvaluationProjectRequest);
}
}
```
## 6.返回结果示例
- 创建评估项目(CreateEvaluationProject)接口的返回值:无返回
- 查询评估项目列表(ListEvaluationProjects)接口的返回值:
```
{
"evaluation_projects":[
{
"evaluation_project_id":187,
"evaluation_project_name":"Huawei-Codelabs-UGO-Evaluation-test",
"evaluation_project_status":"PENDING",
"project_status_detail":{
"object_collection_status":"COMPLETED",
"pre_migration_status":"COMPLETED"
},
"source_db_type":"ORACLE",
"source_db_version":"11g",
"target_db_version":"",
"collect_size":4623291,
"resource_id":"826c916c-421d-4d9f-a68c-38bc3a9504ad",
"created_time":"2022-06-23T03:34:39Z",
"updated_time":"2022-06-23T03:34:39Z",
"error_reason":""
}
],
"total_count":1
}
```
- 查询评估项目状态(ShowEvaluationProjectStatus)接口的返回值:
```
{
"evaluation_project_id":187,
"evaluation_project_name":"Huawei-Codelabs-UGO-Evaluation-test",
"evaluation_project_status":"PENDING",
"project_status_detail":{
"object_collection_status":"COMPLETED",
"pre_migration_status":"COMPLETED"
},
"source_db_type":"ORACLE",
"source_db_version":"11g",
"target_db_version":""
}
```
- 评估项目确认目标数据库类型(ConfirmTargetDbType)接口的返回值:
```
{
"evaluation_project_id":187,
"evaluation_project_name":"Huawei-Codelabs-UGO-Evaluation-test",
"evaluation_project_status":"PENDING",
"project_status_detail":{
"object_collection_status":"COMPLETED",
"pre_migration_status":"COMPLETED"
},
"source_db_type":"ORACLE",
"target_db_type":"RDS for MySQL",
"target_db_version":"5.7"
}
```
- 查询评估项目详情(ShowEvaluationProjectDetail)接口的返回值:
```
{
"evaluation_project_id":187,
"evaluation_project_name":"Huawei-Codelabs-UGO-Evaluation-test",
"source_db_size":"0.094 TB",
"source_db_schema":39,
"source_db_cpu":"2",
"source_db_character_set":"ZHS16GBK",
"source_db_os":"Linux x86 64-bit",
"source_db_instance_num":1,
"source_db_ram":"SGA 0.99 GB, PGA 0.2 GB, AMM",
"source_db_info":{
"user_name":"ugo",
"connection_string":"100.xx.xxx.xxx:1521:ORCL",
"source_db_type":"ORACLE",
"service_name":"orcl",
"ip":null,
"port":"null"
},
"source_db_phy_ram":"7.62 GB",
"source_db_version":"11.2.0.1.0",
"source_db_conf":"Single Instance",
"source_db_clock":"+00:00"
}
```
- 删除评估项目(DeleteEvaluationProject)接口的返回值:
```
{
"evaluation_project_id":187
}
```
## 7.参考链接
更多信息请参考[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/sdk?product=ugo)
和数据库和应用迁移 UGO服务文档的[API参考](https://support.huaweicloud.com/api-ugo/ugo_05_0002.html)。
## 修订记录
| 发布日期 | 文档版本 | 修订说明 |
| :--------: | :------: | :----------: |
| 2022-09-22 | 1.0 | 文档首次发布 |