OCI本地数据库备份至OCI脚本在Oracle Linux中运行异常求助
看起来你在尝试用OCI CLI的create_backup_from_onprem脚本把本地Oracle数据库备份上传到OCI时遇到了KeyError: 'connection_timeout'的问题,而且升级CLI后依然没解决,我来帮你梳理下可能的排查方向:
首先把你遇到的完整报错信息贴出来,方便后续排查参考:
[oracle@srv1 oci-cli-scripts]$ ./create_backup_from_onprem --config-file /home/oracle/.oci/config --profile DEFAULT --display-name testbackup --compartment-id ocid1.tenancy.oc1..aaaaaaaajrsprf3hmjr7xixz22gft36vmfz232ydxliw455ndu7rgpxghq5a --availability-domain PHX-AD-1 --edition ENTERPRISE_EDITION_HIGH_PERFORMANCE --opc-installer-dir /home/oracle/oci/opc_installer/opc_installer --tmp-dir /home/oracle/oci/onprem_upload /home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/oci/_vendor/httpsig_cffi/sign.py:10: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6. from cryptography.hazmat.backends import default_backend # noqa: F401 Connecting to Oracle database Oracle version is:19.0.0.0.0 Checking the archive log mode of the database Checking if the database is open Getting database name and database unique name Database Id:2940187580 Name:ORADB UniqueName:oradb Fetching character set Character Set:AL32UTF8 Fetching national character set National Character Set:AL16UTF16 Fetching rac mode Rac mode:FALSE Traceback (most recent call last): File "./create_backup_from_onprem", line 8, in <module> sys.exit(create_backup_from_onprem()) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/click/core.py", line 1128, in __call__ return self.main(*args, **kwargs) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/click/core.py", line 1053, in main rv = self.invoke(ctx) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/click/core.py", line 1395, in invoke return ctx.invoke(self.callback, **ctx.params) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/click/core.py", line 754, in invoke return __callback(*args, **kwargs) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/oci_cli/scripts/database/dbaas.py", line 281, in create_backup_from_onprem client = cli_util.build_client('database', 'database', ctx) File "/home/oracle/oci/lib/oracle-cli/lib64/python3.6/site-packages/oci_cli/cli_util.py", line 578, in build_client if ctx.obj['connection_timeout']: KeyError: 'connection_timeout' [oracle@srv1 oci-cli-scripts]$
下面是几个可以尝试的解决步骤:
检查OCI配置文件的完整性
这个KeyError提示CLI在读取上下文时找不到connection_timeout键,大概率是配置文件存在问题。打开/home/oracle/.oci/config,检查DEFAULT段里是否有connection_timeout配置项,如果没有,手动添加一行(比如connection_timeout=60,单位为秒);同时确认配置文件格式正确,所有项都是key=value的形式,没有语法错误。另外,要确保这个文件的权限设置为600,避免权限问题导致读取异常。彻底重新安装OCI CLI
你提到已经升级了CLI,但可能升级不彻底或者版本兼容性存在问题。先卸载现有CLI:pip uninstall oci-cli -y然后用官方推荐的方式重新安装最新稳定版:
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"安装完成后用
oci --version确认版本,再尝试运行脚本。处理Python版本兼容性警告
报错里提到Python3.6已不再被cryptography支持,虽然这不是直接导致KeyError的原因,但可能影响CLI的稳定性。如果环境允许,建议升级Python到3.8或更高版本(OCI CLI官方推荐版本),然后重新安装CLI依赖包,避免潜在的兼容性问题。验证CLI客户端能否正常初始化
写一个简单的测试脚本,手动构建Database客户端,看看是否能正常工作:import oci # 加载配置文件 config = oci.config.from_file('/home/oracle/.oci/config', 'DEFAULT') # 构建Database客户端 database_client = oci.database.DatabaseClient(config) # 调用一个简单的API测试 try: compartments = database_client.list_compartments(config['tenancy']) print("客户端初始化成功,返回的 compartments 数量:", len(compartments.data)) except Exception as e: print("客户端初始化失败:", str(e))运行这个脚本,如果报错,说明是CLI配置或客户端本身的问题;如果能正常运行,那可能是
create_backup_from_onprem脚本的封装有问题,这时候可以尝试直接用OCI CLI的原生命令来执行备份上传操作。
备注:内容来源于stack exchange,提问作者Nishchal Junghare

