TessellatingHeckler's helpful answer shows you how to use the .Split() method to perform separator-based splitting that limits the number of tokens returned, which in his solution only splits by the 1st _ instance, to return a total of 2 tokens.
As an aside: you can also use PowerShell's own -split operator, whose use does have its advantages:
$_ -split '_', 2 # in this case, same as: $_.split('_', 2)
That said, your later comments suggest that you may be looking to simply remove everything after the 2nd _ instance from your input strings.
$dbVersion, $scriptNumber, $null = $_ -split '_', 3 # -> e.g., '0.0.0.1', 03', '1'
Note how specifying $null as the variable to receive the 3rd token effective discards that token, given that we're not interested in it.
To re-join the resulting 2 tokens with _, it's simplest to use the -join operator:
$dbVersion, $scriptNumber -join '_'
To put it all together:
# Sample array of input lines.
$lines=@'
0.0.0.1_03_1
0.0.0.1_03
0.0.0.1_02_2_1_3_4
0.0.0.1_02_1
0.0.0.1_02
0.0.0.1_01_1
0.0.0.1_01
'@ -split '\r?\n'
# Use Get-Content $SourceTxtDbFile instead of $lines in the real world.
$lines | ForEach-Object {
# Split by the first two "_" and save the first two tokens.
$dbVersion, $scriptNumber, $null = $_ -split '_', 3
# Re-join the first two tokens with '_'and output the result.
$dbVersion, $scriptNumber -join '_'
}
With your sample input, this yields:
0.0.0.1_03
0.0.0.1_03
0.0.0.1_02
0.0.0.1_02
0.0.0.1_02
0.0.0.1_01
0.0.0.1_01