McDonald's tally in the second period lifted the Blues into a 2-2 tie, and Patrik Berglund's score midway through the final frame put St. Louis in front by a goal.
Vancouver's Mason Raymond scored on a power play with 1:47 remaining to force extra time.
Following a scoreless overtime, Blues goalie Jake Allen made a pair of stops in the shootout, while Oshie and McDonald beat Roberto Luongo, handing St. Louis a third straight victory.
Allen finished with 28 saves.
Luongo turned aside 20 shots as Vancouver wrapped up a 2-1-1 homestand.