With Brian Schneider starting behind the plate, Ruiz sat out the first six innings. He still set his career high for RBIs with his slam in the seventh and run-scoring double in the eighth.
Oswalt (2-0) gave up five hits and two runs, one earned, in six innings. The Braves were the only National League team Oswalt had not beaten.
Schneider gave the Phillies a 3-2 lead with his two-run homer off Brandon Beachy (0-1) in the fourth. The Phillies had 15 hits, including eight for extra bases.
Ruiz hit an 0-2 pitch from Scott Linebrink to left for his first career pinch-hit homer. The grand slam drove in Raul Ibanez, who doubled to knock Beachy out of the game, John Mayberry and Wilson Valdez. Mayberry hit a pinch-hit single off George Sherrill, who then walked Valdez.
Shane Victorino, who had four hits, singled off Cristhian Martinez in the eighth to drive in Ruiz.
Beachy is still looking for his first win after giving up seven hits and four runs in six-plus innings. The rookie right-hander has made five career starts, including three against the Phillies.
Victorino doubled to right to lead off the game and scored on Ben Francisco's two-out single. Beachy issued an intentional walk to Ryan Howard to face Francisco.
The Braves scored two in the third. Alex Gonzalez doubled to right and scored on Freddie Freeman's single. Beachy pushed Freeman to second with a sacrifice. Martin Prado followed with a single to right that Francisco bobbled for an error, allowing Freeman to score.
Atlanta's 2-1 lead didn't last an inning. With two outs in the fourth, Ibanez walked, and Schneider followed with the homer about 10 rows deep in the right-field stands.
Oswalt pitched out of a jam after loading the bases with two outs in the sixth. Oswalt gave up a single to Chipper Jones before walking Brian McCann and Uggla. Jason Heyward's broken-bat pop-up to third baseman Placido Polanco ended the inning.
Oswalt was 0-3 with a 6.21 ERA against Atlanta in nine games, including eight starts, with Houston and Philadelphia before Saturday. David Herndon, J.C. Romero and Danys Baez combined for three scoreless innings behind him.
Ruiz drove in four runs three times, most recently on Sept. 13, 2010 at Florida.
Notes: The double by Gonzalez in the third inning was the 300th of his career. He added another double high off the left-field wall in the fifth. ... Oswalt singled to right field in the fifth and was thrown out by Heyward trying to advance to second base. ... Manny Ramirez's retirement leaves Jones as the active leader with 207 game-winning RBIs.