Resize operation completed for file# 201 ......

博主在查看alert log时,发现大量Resize operation completed for file# 201日志。检查发现表空间无问题,也不存在201文件,tempfile空间充足。查询MOS得知这是一个已修复的bug,但需修改参数。还解释了201号文件的由来。

RDBMS 12.2.0.1

今天在查看alert log的时候,发现了大量的Resize operation completed for file# 201 ......,记得之前把表空间已经扩的很大了,应该不存在这个问题。检查了下表空间,表空间不存在问题。也不存在201这个文件 。查看tempfile 发现空间也很充足,才用了4M,和日志中的 old size,newsize根本不匹配。是哪里的问题呢。

2019-05-04T14:54:11.982743+08:00
Resize operation completed for file# 201, old size 32768K, new size 33792K
Resize operation completed for file# 201, old size 33792K, new size 34816K
Resize operation completed for file# 201, old size 34816K, new size 35840K
Resize operation completed for file# 201, old size 35840K, new size 36864K
Resize operation completed for file# 201, old size 36864K, new size 37888K
Resize operation completed for file# 201, old size 37888K, new size 38912K
Resize operation completed for file# 201, old size 38912K, new size 39936K
Resize operation completed for file# 201, old size 39936K, new size 40960K
Resize operation completed for file# 201, old size 40960K, new size 41984K
Resize operation completed for file# 201, old size 41984K, new size 43008K
Resize operation completed for file# 201, old size 43008K, new size 44032K
Resize operation completed for file# 201, old size 44032K, new size 45056K
2019-05-04T14:54:13.050151+08:00
Resize operation completed for file# 201, old size 45056K, new size 46080K
Resize operation completed for file# 201, old size 46080K, new size 47104K
Resize operation completed for file# 201, old size 47104K, new size 48128K
Resize operation completed for file# 201, old size 48128K, new size 49152K
Resize operation completed for file# 201, old size 49152K, new size 50176K
Resize operation completed for file# 201, old size 50176K, new size 51200K
Resize operation completed for file# 201, old size 51200K, new size 52224K
Resize operation completed for file# 201, old size 52224K, new size 53248K
Resize operation completed for file# 201, old size 53248K, new size 54272K
Resize operation completed for file# 201, old size 54272K, new size 55296K
Resize operation completed for file# 201, old size 55296K, new size 56320K
Resize operation completed for file# 201, old size 56320K, new size 57344K
Resize operation completed for file# 201, old size 57344K, new size 58368K
Resize operation completed for file# 201, old size 58368K, new size 59392K
Resize operation completed for file# 201, old size 59392K, new size 60416K
Resize operation completed for file# 201, old size 60416K, new size 61440K
Resize operation completed for file# 201, old size 61440K, new size 62464K
Resize operation completed for file# 201, old size 62464K, new size 63488K
Resize operation completed for file# 201, old size 63488K, new size 64512K
Resize operation completed for file# 201, old size 64512K, new size 65536K
Resize operation completed for file# 201, old size 65536K, new size 66560K
Resize operation completed for file# 201, old size 66560K, new size 67584K
Resize operation completed for file# 201, old size 67584K, new size 68608K
Resize operation completed for file# 201, old size 68608K, new size 69632K
Resize operation completed for file# 201, old size 69632K, new size 70656K
2019-05-04T14:54:14.056344+08:00
Resize operation completed for file# 201, old size 70656K, new size 71680K
Resize operation completed for file# 201, old size 71680K, new size 72704K
Resize operation completed for file# 201, old size 72704K, new size 73728K
Resize operation completed for file# 201, old size 73728K, new size 74752K
Resize operation completed for file# 201, old size 74752K, new size 75776K
Resize operation completed for file# 201, old size 75776K, new size 76800K
Resize operation completed for file# 201, old size 76800K, new size 77824K
Resize operation completed for file# 201, old size 77824K, new size 78848K
Resize operation completed for file# 201, old size 78848K, new size 79872K
Resize operation completed for file# 201, old size 79872K, new size 80896K
Resize operation completed for file# 201, old size 80896K, new size 81920K
Resize operation completed for file# 201, old size 81920K, new size 82944K
Resize operation completed for file# 201, old size 82944K, new size 83968K
Resize operation completed for file# 201, old size 83968K, new size 84992K
Resize operation completed for file# 201, old size 84992K, new size 86016K
Resize operation completed for file# 201, old size 86016K, new size 87040K
Resize operation completed for file# 201, old size 87040K, new size 88064K
Resize operation completed for file# 201, old size 88064K, new size 89088K
Resize operation completed for file# 201, old size 89088K, new size 90112K
Resize operation completed for file# 201, old size 90112K, new size 91136K
Resize operation completed for file# 201, old size 91136K, new size 92160K
2019-05-04T14:54:15.083241+08:00
Resize operation completed for file# 201, old size 92160K, new size 93184K
Resize operation completed for file# 201, old size 93184K, new size 94208K
Resize operation completed for file# 201, old size 94208K, new size 95232K
Resize operation completed for file# 201, old size 95232K, new size 96256K
Resize operation completed for file# 201, old size 96256K, new size 97280K
Resize operation completed for file# 201, old size 97280K, new size 98304K
Resize operation completed for file# 201, old size 98304K, new size 99328K
Resize operation completed for file# 201, old size 99328K, new size 100352K
Resize operation completed for file# 201, old size 100352K, new size 101376K
Resize operation completed for file# 201, old size 101376K, new size 102400K
Resize operation completed for file# 201, old size 102400K, new size 103424K
Resize operation completed for file# 201, old size 103424K, new size 104448K
Resize operation completed for file# 201, old size 104448K, new size 105472K
Resize operation completed for file# 201, old size 105472K, new size 106496K
Resize operation completed for file# 201, old size 106496K, new size 107520K
Resize operation completed for file# 201, old size 107520K, new size 108544K
Resize operation completed for file# 201, old size 108544K, new size 109568K
Resize operation completed for file# 201, old size 109568K, new size 110592K
Resize operation completed for file# 201, old size 110592K, new size 111616K
Resize operation completed for file# 201, old size 111616K, new size 112640K
Resize operation completed for file# 201, old size 112640K, new size 113664K
2019-05-04T14:54:16.085848+08:00
Resize operation completed for file# 201, old size 113664K, new size 114688K
Resize operation completed for file# 201, old size 114688K, new size 115712K
Resize operation completed for file# 201, old size 115712K, new size 116736K
Resize operation completed for file# 201, old size 116736K, new size 117760K
Resize operation completed for file# 201, old size 117760K, new size 118784K
Resize operation completed for file# 201, old size 118784K, new size 119808K
Resize operation completed for file# 201, old size 119808K, new size 120832K
Resize operation completed for file# 201, old size 120832K, new size 121856K
Resize operation completed for file# 201, old size 121856K, new size 122880K
Resize operation completed for file# 201, old size 122880K, new size 123904K
Resize operation completed for file# 201, old size 123904K, new size 124928K
Resize operation completed for file# 201, old size 124928K, new size 125952K
Resize operation completed for file# 201, old size 125952K, new size 126976K

查看了下MOS,发现有篇文章

Resize Operation Completed For File# 201; FILE# Does Not Exist (文档 ID 2246369.1)

里面提到,这是一个bug ,虽然这个bug在12.2.0.1中已经修复了(补丁包18603375 ),但是还是需要修改一个参数 。

关于为什么是201号文件,是这样说的 :

It's tempfiles and its number is generated dynamically based on parameter db_files - default value 200.
We have to subtract db_files value to get the file number in v$tempfile or db_files parameter value + tempfile# so in this case 201-200=1 is the tempfile#.

Apply patch 18603375 first, then set the below parameter along with the fix.

SQL> alter system set "_disable_file_resize_logging"=TRUE ; (Its default value is FALSE)

END

关于上面的问题,有没有可能是我运行代码的问题,如果有问题,那大概是哪一个部分出了问题import argparse import csv import os import platform import sys import time from pathlib import Path import torch import serial import cv2 import rospy from std_srvs.srv import Trigger, TriggerResponse from ultralytics.utils.plotting import Annotator, colors, save_one_box from models.common import DetectMultiBackend from utils.dataloaders import LoadStreams from utils.general import ( LOGGER, Profile, check_img_size, increment_path, non_max_suppression, scale_boxes, xyxy2xywh, ) from utils.torch_utils import select_device, smart_inference_mode @smart_inference_mode() class GunControllerNode: def __init__(self, opt): self.opt = opt self.save_img = not opt.nosave self.source = str(opt.source) self.project = opt.project self.name = opt.name self.exist_ok = opt.exist_ok # 初始化变量以跟踪射击状态 self.gun_state = "idle" # idle, firing, cooling self.fire_start_time = 0 self.dt = [Profile(), Profile(), Profile()] # 初始化计时器 # 初始化串口连接 try: self.ser = serial.Serial(opt.port, opt.baudrate, timeout=1) LOGGER.info(f"Successfully opened serial port {opt.port} at {opt.baudrate} baudrate") except Exception as e: LOGGER.error(f"Failed to open serial port {opt.port}: {e}") self.ser = None # 初始化云台角度 self.servo1_angle = 90 # 水平云台 (0-180) self.servo2_angle = 90 # 垂直云台 (70-110) # 跟踪调整状态 self.is_adjusting = False self.adjustment_complete_time = 0 self.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok) (self.save_dir / "labels" if opt.save_txt else self.save_dir).mkdir(parents=True, exist_ok=True) self.device = select_device(opt.device) self.model = DetectMultiBackend(opt.weights, device=self.device, dnn=opt.dnn, data=opt.data, fp16=opt.half) self.stride, self.names, self.pt = self.model.stride, self.model.names, self.model.pt self.imgsz = check_img_size(opt.imgsz, s=self.stride) self.dataset = LoadStreams(self.source, img_size=self.imgsz, stride=self.stride, auto=self.pt) self.vid_path, self.vid_writer = [None] * len(self.dataset), [None] * len(self.dataset) self.model.warmup(imgsz=(1 if self.pt or self.model.triton else len(self.dataset), 3, *self.imgsz)) self.gun_service = rospy.Service('/gun', Trigger, self.gun_callback) rospy.init_node('gun_controller', anonymous=True) self.view_img = opt.view_img self.windows = [] def send_servo_command(self, servo_id, angle): if self.ser is not None: try: cmd = bytes([0xAA, 0xBB, servo_id, angle, 0x0D, 0x0A]) self.ser.write(cmd) return True except Exception as e: LOGGER.error(f"Failed to send servo command: {e}") return False return False def send_gun_command(self, is_fire): if self.ser is not None: try: if is_fire: cmd = bytes([0xAA, 0xBB, 0x03, 0x01, 0x0D, 0x0A]) else: cmd = bytes([0xAA, 0xBB, 0x03, 0x00, 0x0D, 0x0A]) self.ser.write(cmd) return True except Exception as e: LOGGER.error(f"Failed to send gun command: {e}") return False return False def gun_callback(self, req): response = TriggerResponse() try: for path, im, im0s, vid_cap, s in self.dataset: with self.dt[0]: im = torch.from_numpy(im).to(self.model.device) im = im.half() if self.model.fp16 else im.float() im /= 255 if len(im.shape) == 3: im = im[None] with self.dt[1]: pred = self.model(im, augment=self.opt.augment, visualize=self.opt.visualize) with self.dt[2]: pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, self.opt.classes, self.opt.agnostic_nms, max_det=self.opt.max_det) for i, det in enumerate(pred): p, im0, frame = path[i], im0s[i].copy(), self.dataset.count p = Path(p) save_path = str(self.save_dir / p.name) txt_path = str(self.save_dir / "labels" / p.stem) + ("" if self.dataset.mode == "image" else f"_{frame}") s += f"{im.shape[2]}x{im.shape[3]} " gn = torch.tensor(im0.shape)[[1, 0, 1, 0]] annotator = Annotator(im0, line_width=self.opt.line_thickness, example=str(self.names)) if det is not None and len(det): det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() for c in det[:, 5].unique(): n = (det[:, 5] == c).sum() s += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, " max_area = 0 selected_det = None for *xyxy, conf, cls in reversed(det): area = (xyxy[2] - xyxy[0]) * (xyxy[3] - xyxy[1]) if area > max_area: max_area = area selected_det = (xyxy, conf, cls) if selected_det is not None: xyxy, conf, cls = selected_det x_center = float((xyxy[0] + xyxy[2]) / 2) y_center = float((xyxy[1] + xyxy[3]) / 2) cv2.circle(im0, (int(x_center), int(y_center)), 5, (0, 0, 255), -1) H, W = im0.shape[:2] center_x, center_y = W // 2, H // 2 threshold_x = W * 0.05 threshold_y = H * 0.05 CAMERA_OFFSET_ANGLE = -5 # 相机安装导致的固定向右偏移1° pixels_per_degree = W / 60 # 假设水平视场角约60度,计算每度对应的像素值 fixed_offset_pixels = int(CAMERA_OFFSET_ANGLE * pixels_per_degree) # 计算像素偏移量 # 在目标处理部分修改(替换原来的中心线计算) adjusted_center_x = center_x + fixed_offset_pixels # 补偿后的中心位置 cv2.line(im0, (adjusted_center_x, 0), (adjusted_center_x, H), (255, 0, 0), 1) # 用蓝色显示补偿中心线 # 修改目标偏差计算(替换原来的dx计算) dx = x_center - adjusted_center_x # 使用补偿后的中心位置计算偏差 dy = y_center - center_y # 垂直方向保持不变 needs_adjustment = abs(dx) > threshold_x * 0.5 or abs(dy) > threshold_y * 0.5 if needs_adjustment: self.is_adjusting = True if self.gun_state == "firing": self.gun_state = "idle" self.send_gun_command(False) LOGGER.info("Aborting fire due to target movement") if abs(dx) > threshold_x: if dx < 0: self.servo1_angle += 2 else: self.servo1_angle -= 2 self.servo1_angle = max(0, min(180, self.servo1_angle)) self.send_servo_command(0x01, self.servo1_angle) elif abs(dx) > threshold_x * 0.5: if dx < 0: self.servo1_angle += 1 else: self.servo1_angle -= 1 self.servo1_angle = max(0, min(180, self.servo1_angle)) self.send_servo_command(0x01, self.servo1_angle) if abs(dy) > threshold_y: if dy < 0: self.servo2_angle += 2 else: self.servo2_angle -= 2 self.servo2_angle = max(70, min(110, self.servo2_angle)) self.send_servo_command(0x02, self.servo2_angle) elif abs(dy) > threshold_y * 0.5: if dy < 0: self.servo2_angle += 1 else: self.servo2_angle -= 1 self.servo2_angle = max(70, min(110, self.servo2_angle)) self.send_servo_command(0x02, self.servo2_angle) LOGGER.info(f"Adjusting: dx={dx:.1f}, dy={dy:.1f} | Servo angles: {self.servo1_angle}°, {self.servo2_angle}°") else: if self.is_adjusting: self.adjustment_complete_time = time.time() self.is_adjusting = False LOGGER.info("Adjustment completed, waiting 2 seconds before firing") if self.gun_state == "idle" and not self.is_adjusting and time.time() - self.adjustment_complete_time >= 2: if self.send_gun_command(True): self.fire_start_time = time.time() self.gun_state = "firing" LOGGER.info("Firing started") if self.gun_state == "firing" and time.time() - self.fire_start_time >= 2: if self.send_gun_command(False): self.gun_state = "cooling" LOGGER.info("Firing stopped, entering 3-second cooling period") if self.gun_state == "cooling" and time.time() - self.fire_start_time >= 5: self.gun_state = "idle" LOGGER.info("Cooling completed, ready to fire again") else: if self.gun_state in ["firing", "cooling"]: self.send_gun_command(False) self.gun_state = "idle" LOGGER.info("No target detected, gun turned off") response.success = False response.message = "No target detected, gun turned off" return response im0 = annotator.result() if self.view_img: if platform.system() == "Linux" and p not in self.windows: self.windows.append(p) cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0]) cv2.imshow(str(p), im0) cv2.waitKey(1) LOGGER.info(f"{s}{'' if len(det) else '(no detections), '}{self.dt[1].dt * 1e3:.1f}ms") if self.ser is not None: self.ser.close() response.success = True response.message = "Gun operation completed successfully" except Exception as e: LOGGER.error(f"Error during gun operation: {e}") response.success = False response.message = f"Error during gun operation: {e}" return response def run(self): rospy.spin() def parse_opt(): parser = argparse.ArgumentParser() parser.add_argument("--weights", nargs="+", type=str, default=Path("target.pt"), help="model path or triton URL") parser.add_argument("--source", type=str, default=Path("0"), help="file/dir/URL/glob/screen/0(webcam)") parser.add_argument("--data", type=str, default=Path("data/coco128.yaml"), help="(optional) dataset.yaml path") parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[640], help="inference size h,w") parser.add_argument("--conf-thres", type=float, default=0.25, help="confidence threshold") parser.add_argument("--iou-thres", type=float, default=0.25, help="NMS IoU threshold") parser.add_argument("--max-det", type=int, default=1000, help="maximum detections per image") parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") parser.add_argument("--view-img", action="store_true", help="show results") parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") parser.add_argument("--save-conf", action="store_true", help="save confidences in --save-txt labels") parser.add_argument("--save-crop", action="store_true", help="save cropped prediction boxes") parser.add_argument("--nosave", action="store_true", help="do not save images/videos") parser.add_argument("--classes", nargs="+", type=int, help="filter by class: --classes 0, or --classes 0 2 3") parser.add_argument("--agnostic-nms", action="store_true", help="class-agnostic NMS") parser.add_argument("--augment", action="store_true", help="augmented inference") parser.add_argument("--visualize", action="store_true", help="visualize features") parser.add_argument("--update", action="store_true", help="update all models") parser.add_argument("--project", default=Path("runs/detect"), help="save results to project/name") parser.add_argument("--name", default="exp", help="save results to project/name") parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") parser.add_argument("--line-thickness", default=3, type=int, help="bounding box thickness (pixels)") parser.add_argument("--hide-labels", default=False, action="store_true", help="hide labels") parser.add_argument("--hide-conf", default=False, action="store_true", help="hide confidences") parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") parser.add_argument("--port", type=str, default="/dev/gun", help="serial port for servo control") parser.add_argument("--baudrate", type=int, default=115200, help="baud rate for serial communication") opt = parser.parse_args() opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 return opt def main(opt): controller = GunControllerNode(opt) controller.run() if __name__ == "__main__": opt = parse_opt() main(opt)
最新发布
07-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值