如何利用LoadRunner最高效的批量制造Oracle数据

简介: 前不久写过一篇高效大批量制造MySQL数据的文章:《如何利用LoadRunner最高效的批量制造MySQL数据》,后来有人问我,怎么高效大批量制造Oracle数据。其实是一样的,也是用JDBC的批量插入(addBatch)方法,以下就提供一下我写的脚本,以供参考
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/77965361

前不久写过一篇高效大批量制造MySQL数据的文章:《如何利用LoadRunner最高效的批量制造MySQL数据》,后来有人问我,怎么高效大批量制造Oracle数据。其实是一样的,也是用JDBC的批量插入(addBatch)方法,以下就提供一下我写的脚本,以供参考:

/*
 * LoadRunner Java script. (Build: _build_number_)
 * 
 * Script Description: 
 *                     
 */
import lrapi.lr;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;   
import java.sql.SQLException;
import java.lang.StringBuffer;
import java.util.List;
import java.util.ArrayList;

public class Actions
{
	//设定数据库驱动,数据库连接地址、端口、名称,用户名,密码  
    String driverName="oracle.jdbc.OracleDriver";  
    String url="jdbc:oracle:thin:@192.168.1.176:1521:orcl";   
    String user="test";   //用户名  
    String password="123456";  //密码  
          
    PreparedStatement pstmt = null;  	
          
    //数据库连接对象  
    Connection conn = null; 
    
    public void connection(){
	    try {
		//反射Oracle数据库驱动程序类  
		Class.forName(driverName);  
              
		//获取数据库连接  
		conn = DriverManager.getConnection(url, user, password);  
        // 关闭事务自动提交
   		conn.setAutoCommit(false);      
		//输出数据库连接  
		System.out.println(conn);
	    } catch (ClassNotFoundException e) {  
		e.printStackTrace();  
	    } catch (SQLException e) {  
		e.printStackTrace();  
	    }
	}
	public void deconnection(){
	    try{   
		    if(pstmt != null){  
				pstmt.close();  
		    }
    		if(conn != null){  
				conn.close();  
		    } 
		} catch (SQLException e) {  
		    e.printStackTrace();  
		}   
	}
    public void addBatchData(List alist){
    	try{
		    for (int i = 0; i < alist.size(); i++) {
    			pstmt.setString((i+1), alist.get(i).toString());
   			}
		    //把一个SQL命令加入命令列表
    		pstmt.addBatch();
    	} catch (Exception e) {  
			e.printStackTrace();  
	    }
    }

	public int init() throws Throwable {
		return 0;
	}//end of init


	public int action() throws Throwable {
        String sqlStr="insert into test_opadetail(id, opaid, pripid, uniscid, entname, enttype, enttype_cn, regorg, " +
        	"regorg_cn, lerep, regno, certype, cerno, specause, specause_cn, abntime, decorg, decorg_cn, ismove, " +
        	"remexcpres, remexcpres_cn, remdate, redecorg, redecorg_cn, creationtime, creatoruserid, lastmodificationtime, " +
        	"lastmodifieruserid, deletiontime, deleteruserid, isdeleted, dom, enttype_zn, year)" +
            " values " +
        	"(sys_guid(), ?, ?, ?, ?, ?, ?, '220101', '长春市工商行政管理局', 'test', ?, '', '', 1, " +
        	"'未按规定公示年报', to_date(to_char(sysdate,'yyyy/mm/dd'),'YYYY/MM/DD'), '220101', '长春市工商行政管理局', 1," +
			" '', '', '', '', '', to_date(to_char(sysdate,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS'), " +
        	"'97e6daadd18f4667be0c5c42b84b8a90', to_date(to_char(sysdate,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS'), " +
        	"'97e6daadd18f4667be0c5c42b84b8a90', '', '', 0, ?, ?, '')";
    	List list = new ArrayList();//定义一组参数化数据
    	list.add(lr.eval_string("{Param1}"));
    	list.add(lr.eval_string("{Param2}"));
    	list.add(lr.eval_string("{Param3}"));
    	list.add("TEST"+lr.eval_string("{Param4}"));
    	list.add(lr.eval_string("{Param5}"));
    	list.add(lr.eval_string("{Param6}"));
    	list.add(lr.eval_string("{Param7}"));
    	list.add(lr.eval_string("TESTA-{Param4}"));
    	list.add(lr.eval_string("{Param12}"));
    	connection();
    	StringBuffer sql = new StringBuffer();
   		sql.append(sqlStr);
   		lr.start_transaction("action");
    	try{
   			//创建该连接下的PreparedStatement对象  
		    pstmt = conn.prepareStatement(sql.toString());
    		for (int k=0;k<1000;k++){//一个User一批次插入1000条
    			addBatchData(list);
    		}
			// 执行批量更新
   			pstmt.executeBatch();
		} catch (Exception e) {  
			e.printStackTrace();  
	    }
   		lr.end_transaction("action", lr.AUTO);
    	deconnection();
    	
		return 0;
	}//end of action

	public int end() throws Throwable {   
		return 0;
	}//end of end
}
然后通过Loadrunner进行多用户并发的跑脚本,快速的制造出成千上亿条数据,我就是用这个方法,在测试环境中模拟出现场的大数据量,然后去重现或定位系统当中由于慢SQL引起的慢事务问题。
        注:以上这是批量插入数据的脚本,有人会将批量更新也放到脚本中执行,这时候就要避免行级锁在高并发时引起死锁,所以强调更新条件应该使用主键。
目录
相关文章
|
6天前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
1天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
14 0
|
1天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在 DataWorks 中,使用Oracle作为数据源进行数据映射和查询,如何更改数据源为MaxCompute或其他类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
15 1
|
12天前
|
SQL Oracle 关系型数据库
Oracle spool格式化数据命令
在这个示例中,通过设置不同的 `SET`命令参数,你可以控制输出的格式,包括每页行数、每行字符数、列分隔符等。你也可以使用其他的 `SET`命令参数来进一步定制输出格式。
11 0
|
12天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
12天前
|
SQL Oracle 关系型数据库
Oracle 12c的TOP N语句:数据排名的“快速通道”
【4月更文挑战第19天】Oracle 12c的TOP N语句是用于快速获取数据集排名前N的记录的SQL查询方法,特别适合寻找最具代表性的数据。通过指定排序条件和数量,TOP N能高效筛选出所需信息,例如最高销售额产品或最大访问量网页。在Oracle 12c中,查询优化器对TOP N查询进行了优化,保证快速返回结果,并提供丰富的排序和过滤选项。基本用法如`SELECT ... ORDER BY ... FETCH FIRST N ROWS ONLY`,还可结合`OFFSET`进行分页查询或用`WITH TIES`保持结果完整性。掌握TOP N语句能提升数据分析效率,助力企业决策。
|
12天前
|
存储 Oracle 关系型数据库
Oracle 12c的临时UNDO:数据的“临时保镖”
【4月更文挑战第19天】Oracle 12c引入的临时UNDO为数据安全提供新保障。它为临时操作和特定事务提供独立UNDO空间,避免共享UNDO带来的性能瓶颈和管理复杂性。临时UNDO随事务开始分配,记录修改历史,事务结束后自动释放。优点包括提高性能、简化管理及保证数据一致性。但需注意手动配置、监控和优化,以防长时间占用资源。了解其工作原理和最佳实践是提升数据库性能的关键。
|
12天前
|
监控 Oracle 关系型数据库
Oracle 12c的Adaptive执行计划:数据的“聪明导航员”
【4月更文挑战第19天】Oracle 12c的Adaptive执行计划是数据库查询的智能优化工具,能根据实际运行情况动态调整执行策略。它像一个聪明的导航系统,不仅生成初始执行计划,还能实时监控并适应统计信息和资源变化,例如自动切换索引或调整并行度。此外,它支持自适应连接和统计信息收集,提升处理复杂查询和变化数据环境的能力。数据管理员应充分利用这一特性来优化查询性能和用户体验。
|
12天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
12天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。

推荐镜像

更多