有没有办法运行使用操作系统身份验证来运行 RMAN 备份作为 systemd 的 .NET Core 服务?

Posted

技术标签:

【中文标题】有没有办法运行使用操作系统身份验证来运行 RMAN 备份作为 systemd 的 .NET Core 服务?【英文标题】:Is there a way to run a .NET Core Service that uses OS authentication to run RMAN backups as systemd? 【发布时间】:2021-01-01 08:21:11 【问题描述】:

我在 C#/.NET Core 中设置了一项服务,其部分功能是在每天的指定时间启动 RMAN for Oracle。这些功能都可以完美地以 Oracle 用户身份运行,但不能以 root 身份或以 systemd 身份运行(即使我在 init 文件中包含了以 oracle 身份运行的参数)。

尝试以 root 身份运行 RMAN 时出错: Error as Root

ORA-12162: TNS:net 服务名称指定错误

C#代码:

string oraHome = Environment.GetEnvironmentVariable("ORACLE_HOME");
            //execute powershell cmdlets or scripts using command arguments as process
            ProcessStartInfo processInfo = new ProcessStartInfo
            
                FileName = $"oraHome/bin/rman",
                Arguments = $"NOCATALOG TARGET  / CMDFILE RMANObjects.BackupRMAN_RMANObjects.sn.rcv LOG RMANObjects.Backupbackup_log_RMANObjects.sn.txt",
                RedirectStandardError = true,
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            ;

            //start powershell process using process start info
            Process process = new Process();
            process.StartInfo = processInfo;
            process.Start();

RMANandLogMover 初始化/服务文件

[Unit]
Description=RMANandLogMover
DefaultDependencies=no


[Service]
Type=notify
WorkingDirectory=/home/oracle/app/RMANandLogMover/8.25Logmover
ExecStart=/home/oracle/app/RMANandLogMover/8.25Logmover/RMANandLogMover
Environment=ORACLE_HOME=/home/oracle/app/product/19.0.0/dbhome_1
User=oracle
Group=backupdba
RemainAfterExit=yes


[Install]
WantedBy=default.target

【问题讨论】:

为什么不为它写一个简单的 bash 脚本呢? 为什么除了 oracle 软件所有者(通常是“oracle”)之外,您还想以任何方式运行 rman?我想不出一个好的理由。除此之外,您的环境可能没有正确设置 - 特别是 ORACLE_HOME 和 ORACLE_SID。 【参考方案1】:

这里的问题不是所有的环境变量都设置好了。我建议您先调用oraenv,并确保您使用的是oracle的操作系统用户,而不是其他任何用户

export ORACLE_HOME=<path>
export ORACLE_SID=orcl
export ORAENV_ASK=NO
. oraenv

首先编写代码,然后运行 ​​RMAN :)

【讨论】:

以上是关于有没有办法运行使用操作系统身份验证来运行 RMAN 备份作为 systemd 的 .NET Core 服务?的主要内容,如果未能解决你的问题,请参考以下文章

远程桌面,身份验证错误:要求的函数不正确等解决办法

有没有办法使用 oauth 令牌连接到 New-CsOnlineSession?

在 Git 中运行预提交挂钩。有没有办法验证脚本是不是正在运行?

没有密码的django身份验证

有没有办法让一个人在跨子域的 firebase 上进行身份验证

我如何通过 .net 远程调用模拟经过 Windows 身份验证的 Web 用户?