A script to make autoclone automatically everynight

本文提供了一个用于 Oracle E-Business Suite (EBS) R12 的克隆脚本示例,该脚本通过物理备用数据库及归档日志进行克隆操作。文中详细介绍了克隆过程,包括服务关闭、数据库恢复、应用程序克隆等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/sh

#############################################################Pay Attention Please############################################################
###This script only tested on RHEL 3.0 for E-business Suite 11i. If you want to use it for E-business Suite R12, You have to Replace the ###
###path of start and stop scripts. Before running the script, make sure all variable has been changed according to your system!!!!!!!!!!!!###
###And because of it is designed to do clone from a backup through Physical Standby and Archivelogs, so you also need to create a Physical###
###Standby on your test server and write a scripts for your Physical Standby to: 1) sync the archive logs; 2) then switch to primary every###
###day; 3) before switchover you should backup the Physical Standby. You should also create a script to: 1) run prelclone on the source db###
###tier, 2) copy $ORACLE_HOME/appsutil/clone from the source db to the target. The last, you should create a backup after your first clone###
###for some files, such as /etc/oraInst.loc, pfile, $CONTEXT_NAME.xml, wdbsvr.app, CGIcmd.dat, etc........................................###

oruser=ortest
apuser=aptest
appspw=apps ###Apps password will be changed to this after refreshed###
apclpw=abcdefg ###Apps password of source database###
systpw=xyz ###System password of source database###
CONTEXT_NAME=TEST_testserver
ORACLE_HOME=/test/oracle/product/920
ORACLE_SID=TEST
export oruser apuser appspw apclpw systpw CONTEXT_NAME ORACLE_HOME ORACLE_SID

echo ""
echo "Shutting down services on Middle Tier ...please wait"

su - $apuser -c "$COMMON_TOP/admin/scripts/$CONTEXT_NAME/adstpall.sh apps/$appspw"

echo "Waiting for concurrent manager processes to exit..."

echo "Waiting for another 10 munite"

sleep 600

pkill -9 -u $apuser

echo ""
echo "Middle tier services shut down"

echo ""
echo "Shutting down database listener as $oruser user...please wait"
su - $oruser -c ". $ORACLE_HOME/$CONTEXT_NAME.env;$ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME/addlnctl.sh stop $ORACLE_SID"

echo ""
echo "Shutting down database as $oruser user...please wait"
su - $oruser -c ". $ORACLE_HOME/$CONTEXT_NAME.env;$ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME/addbctl.sh stop abort"

echo ""
echo "All services shut down."

echo "Start to recover database."

cp --reply=yes /etc/oraInst.loc.db.$ORACLE_SID /etc/oraInst.loc

su - $oruser -c "sh $HOME/rman_standby_recover.sh"

su - $oruser -c "sh $HOME/auto_copy_clone.sh"

echo "Start to Clone database"

su - $oruser -c "cd $ORACLE_HOME/appsutil/clone/bin;perl adcfgclone.pl dbTier $ORACLE_HOME/appsutil/$CONTEXT_NAME.xml <$apclpw
EOF
"

su - $oruser -c ". $ORACLE_HOME/$CONTEXT_NAME.env;$ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME/addbctl.sh stop immediate"

su - $oruser -c ". $ORACLE_HOME/$CONTEXT_NAME.env;cp --reply=yes $ORACLE_HOME/dbs/init$ORACLE_SID.ora.bck $ORACLE_HOME/dbs/init$ORACLE_SID.ora"

su - $oruser -c ". $ORACLE_HOME/$CONTEXT_NAME.env;$ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME/addbctl.sh start"

echo ""
echo "Start to Clone apps"

cp --reply=yes /etc/oraInst.loc.ap.$ORACLE_SID /etc/oraInst.loc

su - $apuser -c "cd $COMMON_TOP/clone/bin;perl adcfgclone.pl appsTier $HOME/$CONTEXT_NAME.xml <$apclpw
EOF
"

echo "waiting for application startup"

sleep 1800

echo ""
echo "Shutting down services on Middle Tier ...please wait"

su - $apuser -c "$COMMON_TOP/admin/scripts/$CONTEXT_NAME/adstpall.sh apps/$apclpw"

echo "Waiting for concurrent manager processes to exit..."

echo "Waiting for another 10 munite"

sleep 600

pkill -9 -u $apuser

echo ""
echo "Middle tier services shut down,now to change apps password"

su - $apuser -c "FNDCPASS apps/$apclpw 0 Y system/$systpw SYSTEM APPLSYS apps"

su - $apuser -c "cp --reply=yes $IAS_ORACLE_HOME/Apache/modplsql/cfg/wdbsvr.app.bck $IAS_ORACLE_HOME/Apache/modplsql/cfg/wdbsvr.app"

su - $apuser -c "cp --reply=yes $ORACLE_HOME/reports60/server/CGIcmd.dat.bck $ORACLE_HOME/reports60/server/CGIcmd.dat"

echo ""
echo "Rebuild workflow mailer queue And change SITE NAME"

su - $apuser -c "sqlplus apps/$appspw @$FND_TOP/patch/115/sql/wfntfqup apps apps applsys"

su - $apuser -c "sqlplus apps/$appspw @$HOME/auto_change_site_name.sql"

echo ""
echo "Now to restart apps"

su - $apuser -c "$COMMON_TOP/admin/scripts/$CONTEXT_NAME/adstrtal.sh apps/$appspw"[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35496/viewspace-1057221/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35496/viewspace-1057221/

<think>好的,我现在需要帮助用户理解他们提供的Glide配置代码。首先,我要分析用户的问题。用户给出了一个Glide的代码示例,询问其作用或介绍。看起来用户可能是在使用Glide加载图片时,希望了解这段代码的具体功能和各个方法的作用。 首先,我需要回忆Glide的基本用法。Glide是一个Android图片加载库,用于从各种源加载图片并显示在ImageView中。用户提供的代码链式调用了多个方法,我需要逐个解析这些方法的作用。 用户代码是:Glide.with(context).load(imageUri).fitCenter().override(Target.SIZE_ORIGINAL).error(R.drawable.error_placeholder).placeholder(R.drawable.loading_placeholder) 先分解每个方法: 1. Glide.with(context):这是Glide的起点,用于绑定生命周期,通常传入Activity或Fragment的context,确保图片加载不会在页面销毁后继续,避免内存泄漏。 2. .load(imageUri):指定要加载的图片资源,这里是一个Uri,可能是本地文件或网络图片的URI。 3. .fitCenter():设置图片的缩放类型,fitCenter会保持图片的纵横比,使图片完全显示在ImageView中,可能会在两侧或上下留白。 4. .override(Target.SIZE_ORIGINAL):这里设置了图片的尺寸,SIZE_ORIGINAL表示加载原始尺寸的图片,不进行缩放或压缩。这可能影响内存使用,尤其是大图时需要注意OOM问题。 5. .error(R.drawable.error_placeholder):设置加载失败时显示的占位图。 6. .placeholder(R.drawable.loading_placeholder):设置加载过程中显示的占位图。 接下来,我需要考虑用户可能的疑问。用户可能想知道这段代码是否能正确显示原始大小的图片,或者是否有潜在的问题。比如,使用SIZE_ORIGINAL时,如果图片很大,是否会导致内存问题。另外,fitCenter和override的结合使用是否会影响显示效果。 还要考虑用户可能的应用场景。比如,用户可能在开发一个需要显示高分辨率图片的应用,比如相册应用,这时候需要显示原图,但同时要处理可能的性能问题。用户可能没有意识到内存方面的隐患,需要提醒。 此外,用户可能对各个配置项的作用不太清楚,需要逐一解释,并给出使用建议。例如,override方法的作用,以及何时应该使用SIZE_ORIGINAL,何时需要限制尺寸以避免内存溢出。 另外,用户可能没有考虑到ImageView的布局设置,比如是否设置了正确的scaleType或adjustViewBounds,这些也会影响最终的显示效果。需要补充这方面的信息,确保用户了解如何正确配置ImageView来配合Glide的加载设置。 可能还需要比较fitCenter和其他缩放模式的区别,比如centerCrop,以帮助用户选择最合适的缩放方式。 最后,用户可能希望得到最佳实践的建议,比如如何处理大图,如何优化内存使用,或者如何结合其他库如PhotoView来实现手势缩放功能,这些在之前的对话历史中已经提到过,可能需要引用之前的建议来提供更全面的解答。 总结来说,我需要详细解释每个方法的作用,指出潜在的问题,并提供优化建议,确保用户能够正确使用这段代码,同时避免常见陷阱。</think>### Glide配置详解:`.override(Target.SIZE_ORIGINAL)` 高阶用法指南 #### 一、代码结构解析 您提供的Glide配置代码实现了 **原始尺寸加载+居中适配+双占位图** 的核心功能: ```kotlin Glide.with(context) .load(imageUri) .fitCenter() // 缩放模式 .override(Target.SIZE_ORIGINAL) // 尺寸控制 .error(R.drawable.error_placeholder) // 错误占位图 .placeholder(R.drawable.loading_placeholder) // 加载占位图 .into(imageView) ``` --- #### 二、关键参数作用对比表 | 方法/参数 | 功能说明 | 注意事项 | |---------|---------|---------| | `.override(Target.SIZE_ORIGINAL)` | 强制加载原始像素尺寸 | 可能引发OOM,需配合内存优化 | | `.fitCenter()` | 保持宽高比居中显示,自动添加留白 | 需要`android:adjustViewBounds="true"`配合 | | `.error()` | 网络错误/解码失败时显示 | 建议使用与主图比例一致的占位图 | | `.placeholder()` | 加载过程中的过渡图形 | 推荐使用Lottie实现加载动画 | --- #### 三、内存风险预警(SIZE_ORIGINAL模式) 当加载 **4000x6000** 像素的JPEG图片时: - **RGB_8888格式** 内存占用:`4000*6000*4 = 96MB` - **RGB_565格式** 内存占用:`4000*6000*2 = 48MB` **解决方案**: ```kotlin // 在Application中全局配置 Glide.init( context, GlideBuilder().setDefaultRequestOptions( RequestOptions() .format(DecodeFormat.PREFER_RGB_565) // 内存减半 .disallowHardwareConfig() // 禁用硬件加速(解决部分机型兼容问题) ) ) ``` --- #### 四、精确尺寸适配方案 若遇到图片显示尺寸偏差,推荐 **动态测量+比例约束**: ```kotlin Glide.with(context) .load(imageUri) .addListener(object : RequestListener<Drawable> { override fun onResourceReady(...): Boolean { // 获取图片原始尺寸 val width = resource.intrinsicWidth val height = resource.intrinsicHeight // 动态设置ImageView约束 imageView.apply { layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, (measuredWidth * height.toFloat() / width).toInt() ) requestLayout() } return false } }) .into(imageView) ``` --- #### 五、常见问题排查指南 1. **图片显示留白过多** - ✅ 检查父容器是否设置`android:clipChildren="false"` - ✅ 确认ImageView的`scaleType`与代码一致 - ✅ 使用`android:background`代替`android:src`设置底图 2. **OOM崩溃解决方案** ```kotlin .override( calculateMaxWidth(context), // 屏幕宽度*2 calculateMaxHeight(context) // 屏幕高度*2 ) ``` 3. **占位图变形处理** ```kotlin .placeholder( Glide.with(context) .load(R.drawable.loading_placeholder) .fitCenter() ) ``` --- #### 六、进阶优化建议 1. **磁盘缓存策略优化** ```kotlin .diskCacheStrategy(DiskCacheStrategy.DATA) // 缓存原始数据 .onlyRetrieveFromCache(true) // 离线模式 ``` 2. **过渡动画增强** ```kotlin .transition( DrawableTransitionOptions .withCrossFade(300) // 300ms渐入动画 ) ``` 3. **EXIF方向自动校正** ```kotlin .apply(RequestOptions.autoClone()) // 自动识别旋转角度 ``` --- #### 七、最终推荐配置方案 ```kotlin fun loadImageWithSafety(context: Context, uri: Uri, imageView: ImageView) { val metrics = context.resources.displayMetrics val maxWidth = metrics.widthPixels * 2 val maxHeight = metrics.heightPixels * 2 Glide.with(context) .load(uri) .signature(ObjectKey(uri.lastPathSegment ?: "")) // 唯一缓存标识 .fitCenter() .override(maxWidth.coerceAtMost(Target.SIZE_ORIGINAL), maxHeight.coerceAtMost(Target.SIZE_ORIGINAL)) // 智能尺寸限制 .apply(RequestOptions.formatOf(DecodeFormat.PREFER_RGB_565)) .error( Glide.with(context) .load(R.drawable.error_placeholder) .override(200, 200) // 错误图统一尺寸 ) .into(imageView) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值